用lodash深入搜索集合

时间:2016-01-07 13:15:32

标签: javascript lodash

我有一个像这样的对象的数组:

[ 
    { phase: 1, fields: [ { id: 1, type: 'string' }, { id: 2, type: 'date' } ] }, 
    { phase: 2, fields: [ { id: 3, type: 'date' }, { id: 4, type: 'date' } ] }, 
    { phase: 3, fields: [ { id: 5, type: 'string' }, { id: 6, type: 'date' } ] }, 
    { phase: 4, fields: [ { id: 7, type: 'date' }, { id: 8, type: 'string' } ] }, 
]

我想搜索这个数组并返回一个只包含date类型字段的数组。

我一直在关注lodash函数filterwhere,但似乎过滤器只能查看一级深度的项目,而我的数组有多个级别,而我的搜索标准位于第二级数组。解决这个问题的最佳策略是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用javascript reduce功能并在其中使用where

var elements = array.reduce(function(previous, current) {
    return previous.concat(_.where(current.fields, { type : 'date' }));
}, []);

Lodash版本:

var elements = _.reduce(array, function(previous, current) {
    return previous.concat(_.where(current.fields, { type : 'date' }));
}, []);

答案 1 :(得分:0)

这是一种lodash链接方法:

BackgroundWorker

pluck()调用构建一个包含所有_(coll) .pluck('fields') .flatten() .filter({ type: 'date' }) .value(); 值的数组,这些值也是数组。这就是我们接下来调用flatten() - 制作一个大数组的原因。然后,使用filter()可以轻松获得所需内容。