Фильтрация свойств объекта по значению
есть ли какой-то элегантный способ фильтрации свойств falsey из этого объекта с помощью lodash/underscore? Похожие на how _.compact(array)
удаляет элементы falsey из массивов
поэтому с
{
propA: true,
propB: true,
propC: false,
propD: true,
}
возвращение
{
propA: true,
propB: true,
propD: true,
}
4 ответов
до Lodash 4.0
вы хотите _.pick
, Она принимает функцию в качестве аргумента и возвращает объект, содержащий только ключи, для которых эта функция возвращает истина. Так что вы можете сделать:
filtered = _.pick(obj, function(value, key) {return value;})
или еще короче:
filtered = _.pick(obj, _.identity)
Лодашь 4.0
Lodash 4.0 разделить
вот два варианта javascript ванили:
А.: перебирать ключи объекта и delete
имеющие значение falsey.
var obj = {
propA: true,
propB: true,
propC: false,
propD: true,
};
Object.keys(obj).forEach(function(key) {
if (!obj[key]) delete obj[key];
});
console.log(obj);
посмотреть Object.keys()
и Array.prototype.forEach()
Б.: выполните итерацию по ключам объекта и добавьте истинные значения к новому объекту.
var obj = {
propA: true,
propB: true,
propC: false,
propD: true,
};
var filteredObj = Object.keys(obj).reduce(function(p, c) {
if (obj[c]) p[c] = obj[c];
return p;
}, {});
console.log(filteredObj);
Если вы используете lodash, я бы рекомендовал что-то вроде этого:
var object = {
propA: true,
propB: true,
propC: false,
propD: true,
};
_.pick(object, _.identity);
// →
// {
// propA: true,
// propB: true,
// propD: true
// }
на pick () функция генерирует новый объект, который включает свойства, возвращаемые обратным вызовом истина for. Поэтому мы можем просто использовать identity () функция в качестве обратного вызова, так как она просто вернет каждое значение свойства.
к сожалению, я не могу прокомментировать сообщения выше, поэтому я создаю этот дополнительный пост.
С Lodash v4 функциональность, описанная выше, была перемещена в _.pickBy. С _.identity
по умолчанию вы также можете изменить свой код:
var filtered = _.pickBy(obj);
посмотреть этот JSBin рабочий пример.