lodash:过滤非空数组

时间:2017-11-07 23:40:40

标签: javascript arrays lodash

我是lodash的新手,我正在编写一行返回具有非空数组的对象作为值(不包括空数组值);

let results = {"1":[1,2,3],"2":[2,4,6],"0":[]};
let filteredResults = _.filter(results, (result) => {return (_.size(_.values(result)) > 0);});
console.log(filteredResults);

filteredResults的预期值为:{'1': [ 1, 2, 3 ], '2': [ 2, 4, 6 ] }。但是我得到[ [ 1, 2, 3 ], [ 2, 4, 6 ] ]的结果。

密钥12在哪里?

2 个答案:

答案 0 :(得分:2)

_.filter方法可以接受一个对象作为它的第一个参数,但它只返回一个数组,其中包含原始对象的可接受值。您可能希望使用_.pickBy方法,它将返回一个带有通过过滤器的键/值对的对象:

let filteredResults = _.pickBy(results, value => value.length > 0)

答案 1 :(得分:1)

您可以使用reduce并访问每个结果的键和值,对其进行评估并将其推送到新对象。以下是:

let filteredResults = _.reduce(results, (result, value, key) => {
    if (value.length > 0) {
        result[key] = value;
    }
    return result;
}, {});