Comment filtrer un tableau d'objets javascript avec des paramètres variables

Je veux sélectionner des objets en se basant sur les propriétés des objets, mais pas toujours les mêmes propriétés. En d'autres termes:

arr = [
    { name: "joe",   age21: 1 },
    { name: "nick",  age21: 0 },
    { name: "blast", age21: 1 }
];

arr.filter(function(item) {
    return (item.name === "nick" && item.age21 === 1);
});

Mais parfois, je veux juste le filtre sur le nom par exemple:

arr.filter(function(item) {
    return (item.name === "nick");
});

Ce que je veux faire est de généraliser ce donc que la liste des paramètres peuvent être passés à la fonction. Je suis venu avec la suite, mais c'est lent et je me demandais si il ya une meilleure façon:

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;
}

Ensuite, vous pouvez l'appeler avec:
filterParams(arr, {name: "nick", age21: 1});

ou avec:
filterParams(arr, {name: "nick"});

et cela fonctionne dans les deux sens.

Dans le cas où vous poseriez la question, je fais cela parce que j'ai différents ensembles de données que je veux exécuter la même routine, de sorte que les propriétés de filtre doivent être généralisée afin que je puisse filtrer sur les propriétés spécifiques à chaque jeu de données.

Merci!

source d'informationauteur potterzot