How to filter array when object key value is in array
You can do it with Array.prototype.filter()
,
var data = { records : [{ "empid": 1, "fname": "X", "lname": "Y" }, { "empid": 2, "fname": "A", "lname": "Y" }, { "empid": 3, "fname": "B", "lname": "Y" }, { "empid": 4, "fname": "C", "lname": "Y" }, { "empid": 5, "fname": "C", "lname": "Y" }] }var empIds = [1,4,5]var filteredArray = data.records.filter(function(itm){ return empIds.indexOf(itm.empid) > -1;});filteredArray = { records : filteredArray };
If the callBack
returns a true
value, then the itm
passed to that particular callBack
will be filtered out. You can read more about it here.
In 2019 using ES6:
const ids = [1, 4, 5], data = { records: [{ "empid": 1, "fname": "X", "lname": "Y" }, { "empid": 2, "fname": "A", "lname": "Y" }, { "empid": 3, "fname": "B", "lname": "Y" }, { "empid": 4, "fname": "C", "lname": "Y" }, { "empid": 5, "fname": "C", "lname": "Y" }] };data.records = data.records.filter( i => ids.includes( i.empid ) );console.info( data );
This is a fast solution with a temporary object.
var records = [{ "empid": 1, "fname": "X", "lname": "Y" }, { "empid": 2, "fname": "A", "lname": "Y" }, { "empid": 3, "fname": "B", "lname": "Y" }, { "empid": 4, "fname": "C", "lname": "Y" }, { "empid": 5, "fname": "C", "lname": "Y" }], empid = [1, 4, 5], object = {}, result;records.forEach(function (a) { object[a.empid] = a;});result = empid.map(function (a) { return object[a];});document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');