Cómo filtrar una matriz de objetos javascript con parámetros variables
Quiero seleccionar los objetos según las propiedades de los objetos, pero no siempre las mismas propiedades. En otras palabras:
arr = [
{ name: "joe", age21: 1 },
{ name: "nick", age21: 0 },
{ name: "blast", age21: 1 }
];
arr.filter(function(item) {
return (item.name === "nick" && item.age21 === 1);
});
Pero a veces solo quiero filtrar por nombre, por ejemplo:
arr.filter(function(item) {
return (item.name === "nick");
});
Lo que quiero hacer es generalizar esto para que la lista de parámetros se pueda pasar a la función. Se me ocurrió lo siguiente, pero es lento y me pregunto si hay una mejor manera:
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;
}
Entonces podrías llamarlo con:filterParams(arr, {name: "nick", age21: 1});
o con:filterParams(arr, {name: "nick"});
y funcionaría de cualquier manera.
En caso de que se lo pregunte, hago esto porque tengo diferentes conjuntos de datos que quiero ejecutar a través de la misma rutina, por lo que las propiedades del filtro deben generalizarse para poder filtrar las propiedades específicas de cada conjunto de datos.
¡Gracias!