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.
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>');
You can use Array#filter
function and additional array for storing sorted values;
var recordsSorted = []
ids.forEach(function(e) {
recordsSorted.push(records.filter(function(o) {
return o.empid === e;
}));
});
console.log(recordsSorted);
Result:
[ [ { empid: 1, fname: 'X', lname: 'Y' } ],
[ { empid: 4, fname: 'C', lname: 'Y' } ],
[ { empid: 5, fname: 'C', lname: 'Y' } ] ]
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 );