繁体   English   中英

如何使用lodash过滤对象的键?

[英]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)
  1. 过滤以字母“a”开头的键的数据
  2. 将这些键映射为正确的值,并作为 key:value 对象返回

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM