lodash findwhere с пустым массивом

Я застрял с чем-то, что происходит при использовании lodash _.findWhere (то же самое с _.where)

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

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

Я пытаюсь извлечь элементы из testdata, где arr — пустой массив, но _.where также включает элементы с непустыми массивами.

Я также тестировал _.matchesProperty, но результат тот же.

Я уверен, что упускаю что-то простое, но не могу понять, что :s

пожалуйста помоги :)

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


person azhenagri licorne    schedule 25.02.2015    source источник


Ответы (1)


Для этого вам нужно 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' } ] } ]
person Adam Boduch    schedule 25.02.2015