Lodash _.pick() return 空对象

Lodash _.pick() return empty objects

我在 mongodb 中使用 nodejs。我的 object 就像我从集合查询中得到的一样。然后我用 lodash https://lodash.com/docs#pick.

过滤它
var _ = require('lodash');

var object = [{
    branchID: '1239',
    branchName: 'Branch Name 1',
    zoneID: '51',
    zoneName: 'Zone Name 1',
    regionID: '5',
    regionName: 'Region 1'
},
{
    branchID: '1240',
    branchName: 'Branch Name 2',
    zoneID: '52',
    zoneName: 'Zone Name 2',
    regionID: '5',
    regionName: 'Region 3'
}];

var test1 = _.pick(object, function (data) {
    return data.branchName == 1239
});

var test1 = _.pick(object, function (data) {
    return data.branchName == "1239"
});

console.log(test); // {}

我今天一整天都在 mongodb 工作。 上面的代码在今天晚上之前也能正常工作。 通常,它应该 return 我这个 :

{
    branchID: '1239',
    branchName: 'Branch Name 1',
    zoneID: '51',
    zoneName: 'Zone Name 1',
    regionID: '5',
    regionName: 'Region 1'
}

我做错了吗?我还有其他方法来过滤这个对象吗?

我认为你必须使用 _.pickBy 因为这是一个函数你也可以不使用函数但是使用函数你需要 pickBy。

进一步解释:_.pick 是当你想从对象中选择精确的键时 _.pick({a: 1, b: 2, c: 3}, ['a', 'c']) 将 return => {a: 1, c: 3} 只有与 _.omit 与省略相同:_.omit({a: 1, b: 2, c: 3}, ['b'])...

然后有时您想要检查键或值是否符合特定条件,因此您必须使用 _.pickBy 或 _.omitBy:

_.pickBy({a: 1, b: 2, c: 3}, function(item){
    if(_.gte(item, 2)){
        return item;
    }
});

Will return {b: 2, c: 3} 因为它们大于或等于 2。作为对评论的回应,请确保您可能想要做这样的事情,如果您有一个数组:

function checkIfMeetsMyCriteria(obj){
     _.pickBy(obj, function (data) {
         return data.branchName == "1239"
     });
}

_.map(objects, checkIfMeetsMyCriteria);

我认为您想选择 branchID = 1239 的项目,但您使用的是 branchName。所以没有数据returns.

我认为下面的代码应该可以工作。

var test1 = _.pick(object, function (data) {
    return data.branchID == "1239"
});