如何用lodash过滤对象的键?


178

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

我尝试了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无法正常工作,还是有其他原因?

Answers:


283

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>


9
看来这在lodash版本4中是无效的,并且仅使用值而非键来调用新的_.pickBy谓词。Boo :( ...我想您可以链接_.pick和_.pickBy(实际上不,您无法获得相同的功能)
SDK

3
这不再工作的最新Lodash的,只是FYI
Eudis杜兰

8
@EudisDuran,您必须使用.pickBy
apfelbox,2016年

似乎已经修复了最新版本
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.