_.pluck 找不到对象时给出一个未定义值的数组

_.pluck gives an array of undefined values when it does not find the object

我正在使用 lodash 中的 _.pluck() 从数组中获取键的值。

var employees = [
  {
    Name : "abc"  
  },
  {
    Name : "xyz"
  }
]

var res = _.pluck(employees, 'Name'); 

变量 res 将包含 ['abc,'xyz']

当我搜索其他字段字段时

var res = _.pluck(employees, 'SomeRandomField');   

结果 - [未定义,未定义]

如何得到上面的结果就像 null of undefined 而不是数组 未定义值

Plnkr:http://plnkr.co/edit/qtmm6xgdReCuJP5fm1P2?p=preview

我看起来你实际上是在寻找 .some 函数:

var res = _.pluck(employees, "Name");
res = res.some(function (d) { return d }) ? // are any of the elements truth-y?
    // if so, map the  false-y items to null
    res.map(function (item) { return item || null; }) :
    // otherwise (no truth-y items) make res `null`
    null;

我查看了 .pluck 的 lodash 文档,但我认为这是不可能的。

_.pluck(collection, key)

Arguments collection (Array|Object|string): The collection to iterate over.

key (string): The key of the property to pluck.

你可以做的是 .pluck 然后使用 JavaScript 的内置函数(或 lodash 的).map:

var res = _.pluck(employees, 'Name').map(function (d) {
    return d ? d : null;
});

这是相当低效的。您还不如编写自己的函数,该函数只遍历数组一次:

_.nullPluck = function (arr, key) {
    return arr.map(function (d) {
        return d && d[key] ? d[key] : null;
    }) 
}

您可以使用 filterpluck:

var res = _.filter(_.pluck(employees, 'Name'), function(item) {
    return item;
});

您可以使用 compact() to remove falsey values from the plucked array. You can use thru() 来改变包装器的输出。在这种情况下,如果所有采摘值都是 undefined.

,我们需要 null
var collection = [ {}, {}, {} ];

_(collection)
    .pluck('foo')
    .compact()
    .thru(function(coll) { return _.isEmpty(coll) ? null : coll; })
    .value();
// → null