Как фильтровать ключи объекта с помощью lodash?
у меня есть объект с некоторыми ключами, и я хочу сохранить только некоторые ключи с их значением?
Я пробовал с filter
:
var data = {
"aaa":111,
"abb":222,
"bbb":333
};
var result = _.filter(data, function(value, key) {
return key.startsWith("a");
})
console.log(result);
но он выводит массив:
[111, 222]
Это не то, что я хочу.
как это сделать с лодашь? Или что-то еще, если лодаш не работает?
4 ответа:
Лодашь есть
_.pickBy
функции что делает именно то, что вы ищете.var thing = { "a": 123, "b": 456, "abc": 6789 }; var result = _.pickBy(thing, function(value, key) { return _.startsWith(key, "a"); }); console.log(result.abc) // 6789 console.log(result.b) // undefined
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>
просто измените фильтр на omitBy
var result = _.omitBy(data, function(value, key) { return !key.startsWith("a"); })
пример использования
lodash
4.x:var data = { "aaa":111, "abb":222, "bbb":333 }; var result = _.pickBy(data, function(value, key) { return key.startsWith("a"); }); console.log(result); // Object {aaa: 111, abb: 222}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script> <strong>Open your javascript console to see the output.</strong>
не-лодаш способ решить эту проблему довольно читаемым и эффективным образом:
function filterByKeys(obj, keys = []) { const filtered = {} keys.forEach(key => { if (obj.hasOwnProperty(key)) { filtered[key] = obj[key] } }) return filtered } const myObject = { a: 1, b: 'bananas', d: null } filterByKeys(myObject, ['a', 'd', 'e']) // {a: 1, d: null}