let arr1 = [{itemId:1, name:"item1"}, {itemId:2, name:"item2"},{itemId:3, name:"item3"}]
let arr2 = [{id:1, name:"item1"}, {id:2, name:"item2"}]
如何根据arr1
中是否有匹配项(其中arr2
等于arr1.itemId
arr2.id
因此在这种情况下的预期结果将是:
[{itemId:1, name:"item1"}, {itemId:2, name:"item2"}]
我已经尝试过搜索,因此,如果您能向我指出正确的方向,那么这将对您有帮助
谢谢
答案 0 :(得分:6)
建立一组ID,然后根据该ID进行过滤:
const ids = new Set(arr2.map(it => it.id));
const result = array1.filter(it => ids.has(it.itemId));
答案 1 :(得分:4)
您可以使用Array.prototype.filter()和Array.prototype.some():
const arr1 = [{itemId:1, name:"item1"}, {itemId:2, name:"item2"},{itemId:3, name:"item3"}];
const arr2 = [{id:1, name:"item1"}, {id:2, name:"item2"}];
const result = arr1.filter(({ itemId }) => arr2.some(x => x.id === itemId));
console.log(result);
这对于小型数组也可以,但是,如果数组变大,最好从arr2
创建一组ID并使用Set.prototype.has()
而不是Array.prototype.some()
,它将在线性时间中运行,而不是二次时间。
答案 2 :(得分:0)
您可以使用以下内容:
let arr1 = [{itemId:1, name:"item1"}, {itemId:2, name:"item2"},{itemId:3, name:"item3"}];
let arr2 = [{id:1, name:"item1"}, {id:2, name:"item2"}];
let arr3 = arr1.filter(obj => arr2.some(other => obj.itemId == other.id));
console.log(arr3);
使用Array.prototype.filter()
使用Array.prototype.some()
循环和过滤第二个数组中具有匹配项的元素。
答案 3 :(得分:0)
尝试
arr1.filter(x=> arr2.some(y=>y.id==x.itemId));
let arr1 = [{itemId:1, name:"item1"}, {itemId:2, name:"item2"},{itemId:3, name:"item3"}]
let arr2 = [{id:1, name:"item1"}, {id:2, name:"item2"}]
let r=arr1.filter(x=> arr2.some(y=>y.id==x.itemId));
console.log(r);