数组对象去重后再拼接

// 示例数据
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;
}, []);

 

posted @ 2025-10-24 11:07  埃菲尔上的加菲猫  阅读(2)  评论(0)    收藏  举报