I want to select the objects based on the properties of the objects, but not always the same properties. In other words:
arr = [
{ name: "joe", age21: 1 },
{ name: "nick", age21: 0 },
{ name: "blast", age21: 1 }
];
arr.filter(function(item) {
return (item.name === "nick" && item.age21 === 1);
});
But sometimes I just want to filter on name for example:
arr.filter(function(item) {
return (item.name === "nick");
});
What I want to do is generalize this so that the list of parameters can be passed to the function. I've come up with the following, but it's slow and I'm wondering if there is a better way:
filterParams = function(arr, params) {
var new_array = arr.filter(function(item) {
var select = 1
for(obj in params) { //create the filter criteria based on varying set of parameters
var select = select && params[obj] === item[obj];
}
return select;
});
return new_array;
}
Then you could call it with:
filterParams(arr, {name: "nick", age21: 1});
or with:
filterParams(arr, {name: "nick"});
and it would work either way.
In case you're wondering, I'm doing this because I have different data sets that I want to run through the same routine, so the filter properties need to be generalized so that I can filter on properties specific to each dataset.
Thanks!