我有一个带有一些键的对象,我想只保留一些键及其值?

我试着用滤镜:

Const data = { aaa级:111 abb: 222, bbb: 333 }; Const result = _。filter(data, (value, key) => key. startswith ("a")); console.log(结果); < script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js " > < /脚本>

但是它会打印一个数组:

[111, 222]

这不是我想要的。

如何使用lodash?或者如果lodash不起作用的话?


当前回答

只需将过滤器更改为omitBy

Const data = {aaa: 111, abb: 222, bbb: 333}; Const result = _。omitBy(data, (value, key) => !key. startswith ("a")); console.log(结果); < script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js " > < /脚本>

其他回答

Const data = { aaa级:111 abb: 222, bbb: 333 }; const result = Object.keys(data).filter((val) => val.includes("a")); console.log(结果);

Lodash有一个_。pickBy函数,它所做的正是您正在寻找的。

Var事物= { “一”:123年, “b”:456年, “abc”:6789 }; Var结果= _。pickBy(thing, function(value, key) { 返回_。startsWith(键,“a”); }); Console.log (result.abc) // 6789 Console.log (result.b) // undefined < script src = " https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js " > < /脚本>

一个非lodash的方法来解决这个相当可读和有效的方式:

函数filterByKeys(obj, keys = []) { Const filtered = {} 钥匙。forEach(key => { if (obj.hasOwnProperty(key)) { 过滤[key] = obj[key] } }) 返回过滤 } const myObject = { 答:1, 乙:“香蕉”, d:零 } const result = filterByKeys(myObject, ['a', 'd', 'e']) Console.log (result) // {a: 1, d: null}

只需将过滤器更改为omitBy

Const data = {aaa: 111, abb: 222, bbb: 333}; Const result = _。omitBy(data, (value, key) => !key. startswith ("a")); console.log(结果); < script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js " > < /脚本>

纯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)

在数据中筛选以字母“a”开头的键 将这些键映射为适当的值,并返回为key:value对象