[英]How to filter keys of an object with lodash?
我有一个带有一些键的对象,我只想保留其中一些键的值?
我试过filter
:
const data = { aaa: 111, abb: 222, bbb: 333 }; const result = _.filter(data, (value, key) => key.startsWith("a")); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
但它打印了一个数组:
[111, 222]
这不是我想要的。
如何用 lodash 做到这一点? 如果 lodash 不起作用,或者其他什么?
Lodash 有一个_.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
const data = { aaa: 111, abb: 222, bbb: 333 }; const result = _.omitBy(data, (value, key) => !key.startsWith("a")); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
下面是一个使用lodash
4.x 的例子:
const data = { aaa: 111, abb: 222, bbb: 333 }; const result = _.pickBy(data, (value, key) => key.startsWith("a")); console.log(result); // Object { aaa: 111, abb: 222 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script> <strong>Open your javascript console to see the output.</strong>
一种以相当可读和有效的方式解决这个问题的非 lodash 方法:
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 } const result = filterByKeys(myObject, ['a', 'd', 'e']) console.log(result) // {a: 1, d: null}
原生ES2019单行
const data = { aaa: 111, abb: 222, bbb: 333 }; const filteredByKey = Object.fromEntries(Object.entries(data).filter(([key, value]) => key.startsWith("a"))) console.log(filteredByKey);
const data = { aaa: 111, abb: 222, bbb: 333 }; const result = Object.keys(data).filter((val) => val.includes("a")); console.log(result);
var object = { a: 1, b: 2, c: 3 }
_.omit(object, ['a', 'c'])
// => { b: 2 }
纯JS解决方案:
const data = {
aaa: 111,
abb: 222,
bbb: 333
};
const result = Object.keys(data).filter( key => {
return key.indexOf('a') == 0
}).map( key => {
return { key: data[key] }
})
console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.