Есть много способов, можно было бы идти об этом. Ответы до сих пор предполагают, что вы хотите изменить существующие объекты, но вопрос не указывается; слово «фильтр» предполагает, возможно, нет. Поэтому, если вы хотите создать новый фильтрованный объект, вместо того, чтобы мутировать существующий (ы), вы можете использовать функцию уменьшения. Вы сказали, что ваш ключевой список - это строка, но для того, чтобы сохранить примеры чистыми, предположим, что вы просто делаете str.split(',')
или похожи, так что это уже массив, прежде чем передавать его этим функциям.
ES5
function createObjectFilter(keys) {
return function(obj) {
return keys.reduce(function(acc, key) {
acc[key] = obj[key];
return acc;
}, {});
};
}
var myFilter = createObjectFilter([ 'a', 'b' ]);
var filteredObject = myFilter(object);
ES6
const createObjectFilter = keys => obj => keys.reduce((acc, key) => {
acc[key] = obj[key];
return acc;
}, {});
const myFilter = createObjectFilter([ 'a', 'b' ]);
const filteredObject = myFilter(object);
Теперь функция createObjectFilter возвращает действительную функцию фильтра на основе заданного списка ключей.Вы можете сделать это «все в одном», но преимущество этого подхода в том, что становится возможным повторно использовать фильтры в большем количестве ситуаций. Например:
const filteredObjects = unfilteredObjects.map(myFilter);
Этот объект имеет недопустимый ключ и значение. – Jai
исправил пару значений ключа –