我有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]
我可以按People.id
:
selectedArray
_(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循环来计算这个,但我不认为这是一个非常好的解决方案,我想知道是否有更优雅的方法而不是遍历整个对象数组。
答案 0 :(得分:2)
您可以在过滤器(vanilla 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>
&#13;