[英]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.