繁体   English   中英

使用Lodash筛选具有数组字段的对象数组

[英]Filtering Object Array that has an array field Using Lodash

我有2个数据集:

人:

[
    {id:1, selected:[1,2,3,4]},
    {id:2, selected:[1,2,3,4,5]},
    {id:3, selected:[11]},
    {id:4, selected:[1,2,5]}
]

selectedArray:

[1,2,3]

我可以通过selectedArray过滤People.id

_(People).indexBy('id').at(selectedArray).value();

但是我很困惑如何过滤未表示为单个值的字段。 例如。 People[0].selected是整数数组。

是否有可能只显示People包含从所选的领域的人至少1的整数对象selectedArray

我尝试了这个:

_.intersection(selectedArray, _.map(People, 'selected'));

我最终希望拥有一个People对象数组,其中的所选字段仅限于selectArray的整数。 因此结果将是:

[
    {id:1, selected:[1,2,3]},
    {id:2, selected:[1,2,3]},
    {id:4, selected:[1,2]}
]

我目前正在通过for循环来计算此值,但我认为这不是一个很好的解决方案,我想知道是否有比遍历整个对象数组更优雅的方法。

您可以在过滤器(普通js)中使用Array.some:

 var sel = [1,2,3] var arr = [ {id:1, selected:[1,2,3,4]}, {id:2, selected:[1,2,3,4,5]}, {id:3, selected:[11]}, {id:4, selected:[1,2,5]} ] var res = arr.filter(x => x.selected.some(y => sel.some(z => z === y))). map(x => { x.selected = x.selected.filter(y => sel.some(z => z === y)); return x; }) console.log(res) 

或lodash

 var sel = [1,2,3] var arr = [ {id:1, selected:[1,2,3,4]}, {id:2, selected:[1,2,3,4,5]}, {id:3, selected:[11]}, {id:4, selected:[1,2,5]} ] var res = _.filter(arr, x => _.some(x.selected, y => _.some(sel, z => z == y))) console.log(res) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM