为什么lodash中的_.pick(object,_.identity)返回空对象?

时间:2016-03-23 21:42:00

标签: javascript underscore.js lodash

我试图将下划线移到lodash。但是这行代码让我感到困惑。

在我目前的项目中,我们有这行代码。

obj = _.pick(obj, _.identity);

这很明显,它试图删除空属性。

现在,当我切换到lodash时,同一行代码为我返回空对象。

我想弄清楚原因。如何在lodash中实现相同的效果?

我在lodash和下划线网站上都试过这个。它们会产生不同的结果。

这是来自lodash

var obj = {_v:'10.1', uIP:'10.0.0.0', _ts:'123'}
_.pick(obj, _.identity);
Object {}

这是来自下划线

var obj = {_v:'10.1', uIP:'10.0.0.0', _ts:'123'}
_.pick(obj, _.identity);
Object {_v: "10.1", uIP: "10.0.0.0", _ts: "123"}

2 个答案:

答案 0 :(得分:6)

  

为什么lodash中的_.pick(object,_.identity)返回空对象?

因为lodash中的pick期望将数组属性名称传递给它:

var object = { 'a': 1, 'b': '2', 'c': 3 };

_.pick(object, ['a', 'c']);
// → { 'a': 1, 'c': 3 }
  

如何在lodash中实现相同的效果?

Lodash有一个名为pickBy的方法,它接受一个回调函数:

var object = { 'a': 1, 'b': '2', 'c': 3 };

_.pickBy(object, _.isNumber);
// → { 'a': 1, 'c': 3 }

答案 1 :(得分:1)

我有同样的问题,lodash这个方法的名称与下划线略有不同:

var object = { 'a': 1, 'b': '2', 'c': 3 };

_.pickBy(object, _.isNumber);
// → { 'a': 1, 'c': 3 }