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!

Respuestas a la pregunta(1)

Su respuesta a la pregunta