// 示例数据
const arr1 = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 }
];
const arr2 = [
{ id: 2, name: 'Bob', age: 30 }, // 重复
{ id: 3, name: 'Charlie', age: 35 }
];
// 方法1:使用 Map(推荐,性能好)
function mergeAndDedupe(arr1, arr2, key = 'id') {
const map = new Map();
[...arr1, ...arr2].forEach(item => {
map.set(item[key], item);
});
return Array.from(map.values());
}
const result1 = mergeAndDedupe(arr1, arr2);
console.log(result1);
// 输出: [{ id: 1, name: 'Alice'... }, { id: 2, name: 'Bob'... }, { id: 3, name: 'Charlie'... }]
// 方法2:使用 filter + indexOf (基于字符串化)
const merged = [...arr1, ...arr2];
const result2 = merged.filter((item, index) =>
index === merged.findIndex(obj => obj.id === item.id)
);
// 方法3:使用 reduce
const result3 = [...arr1, ...arr2].reduce((acc, current) => {
const exists = acc.find(item => item.id === current.id);
if (!exists) acc.push(current);
return acc;
}, []);