let array1 = [{id:562,name:“Eva Bridal”},{id:582,name:“Finger Touch”},]
let array2 = [{id:575,name:“Saloon Grand”},{id:562,name:“Eva Bridal”}]
最终输出:
let newarray = [{id: 582, name: "Finger Touch"},{id: 575, name: "Saloon Grand"} ]
答案 0 :(得分:2)
将array1
中的所有项目以及array2
中未在array1
中找到的项目添加到结果数组中。
这在数组文字中使用扩展语法,.filter()
使用.find()
来排除重复项。
let array1 = [{id: 562, name: "Eva Bridal"},{id: 582, name: "Finger Touch"},];
let array2 = [{id: 575, name: "Saloon Grand"} , {id: 562, name: "Eva Bridal"}];
var result = [
...array1.filter(o => !array2.find(o2 => o.id == o2.id)),
...array2.filter(o => !array1.find(o2 => o.id == o2.id))
];
console.log(result);
答案 1 :(得分:0)
我认为副本可以出现多次(即3个具有相同ID的项目)。如果是这种情况,您可以使用Set来保留现有ID。 Concat两个数组,并使用reduce创建Map。如果集合中存在项目id
,请将其从地图中删除,如果没有将该项目添加到地图中,则将其id
添加到集合中。当reduce过程结束时,将Map values和spread放到数组中:
const array1 = [{id: 562, name: "Eva Bridal"},{id: 582, name: "Finger Touch"}]
const array2 = [{id: 575, name: "Saloon Grand"}, {id: 562, name: "Eva Bridal"}]
const existing = new Set();
const result = [...array1.concat(array2).reduce((r, o) => {
if(existing.has(o.id)) {
r.delete(o.id);
} else {
existing.add(o.id);
r.set(o.id, o);
}
return r;
}, new Map).values()];
console.log(result);

如果您确定只有成对的重复项目(即 - 不超过2项具有相同的id
),请仅使用地图,并删除地图中已存在的项目:
const array1 = [{id: 562, name: "Eva Bridal"},{id: 582, name: "Finger Touch"}]
const array2 = [{id: 575, name: "Saloon Grand"}, {id: 562, name: "Eva Bridal"}]
const result = [...array1.concat(array2).reduce((r, o) => {
if(r.has(o.id)) {
r.delete(o.id);
} else {
r.set(o.id, o);
}
return r;
}, new Map).values()];
console.log(result);