0

我在使用 lodash _.findWhere 时遇到了一些问题(与 _.where 相同)

var testdata = [
    {
        "id": "test1",
        "arr": [{ "a" : "a" }]
    },
    {
        "id": "test2",
        "arr": []
    }
];

_.findWhere(testdata, {arr : [] });
//--> both elements are found

我正在尝试从 arr 为空数组的 testdata 中提取元素,但 _.where 还包括具有非空数组的元素。

我也用 _.matchesProperty 进行了测试,但没办法,同样的结果。

我确定我错过了一些简单的东西,但看不到什么:s

请帮忙 :)

http://plnkr.co/edit/DvmcsY0RFpccN2dEZtKn?p=preview

4

1 回答 1

2

为此,您需要isEmpty()

var collection = [
    { id: 'test1', arr: [ { a : 'a' } ] },
    { id: 'test2', arr: [] }
];

_.find(collection, function(item) {
    return _.isEmpty(item.arr);
});
// → { id: 'test2', arr: [] }

_.reject(collection, function(item) {
    return _.isEmpty(item.arr);
});
// → [ { id: 'test1', arr: [ { a : 'a' } ] } ]

您还可以使用高阶函数,例如flow(),因此可以抽象您的回调:

var emptyArray = _.flow(_.property('arr'), _.isEmpty),
    filledArray = _.negate(emptyArray);

_.filter(collection, emptyArray);
// → [ { id: 'test2', arr: [] } ]

_.filter(collection, filledArray);
// → [ { id: 'test1', arr: [ { a : 'a' } ] } ]
于 2015-02-25T18:58:37.373 回答