我有2个数组:
a = [{name:"test3", input:[{val:3}]}, {name:"ss", input:[{val:84}]},{name:"sss", input:[{val:86}]},{name:"test", input:[{val:6}]}, {name:"some", input:[{val:8}]}]
a2 = [{name: "dd", field:3},{name: "dd", field:6}]
现在我正在尝试使用`
从两个数组中获取唯一值 filter
:
a.forEach(function(i){
i.input.forEach(function(j){
a2.filter(function(k){return j.val !== k.field;});
});})
然后我要使用:forEach(function(p){p.remove()}); //remove the unique values
因此,我正在将第一个数组中的val
值与第二个数组中的field
值进行比较:
预期结果:
[{name:"ss", input:[{val:84}]},{name:"sss", input:[{val:86}]},{name:"some", input:[{val:8}]}] // these are the ones whose `val` from `a` does not match with the `field` from `a2`
上面的代码什么也没有返回,任何想法都可能丢失?
答案 0 :(得分:3)
我认为有一种更简单的方法:
const a = [{name: "test3", input: [{val: 3 }] }, {name: "ss", input: [{val: 84 }] }, {name: "sss", input: [{val: 86 }] }, {name: "test", input: [{val: 6 }] }, {name: "some", input: [{val: 8 }] } ];
const a2 = [{name: "dd", field: 3 }, {name: "dd", field: 6 }];
const filterBy = a2.map(v => v.field); // [3, 6]
const res = a.filter(el => !el.input.some(input => filterBy.includes(input.val)))
console.log(res)
答案 1 :(得分:1)
通过双精度过滤器查找第二个数组中是否存在具有输入val的元素,从而过滤第一个数组:
let a = [{name:"test3", input:[{val:3}]}, {name:"ss", input:[{val:84}]},{name:"sss", input:[{val:86}]},{name:"test", input:[{val:6}]}, {name:"some", input:[{val:8}]}]
let a2 = [{name: "dd", field:3},{name: "dd", field:6}]
let results = a.filter(e => {
return a2.filter(q => q.field === e.input['val']).length < 1;
});
console.log(results)