You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中两个对象数组查重、合并去重及重复项提取问题求助

问题原因

你现有代码直接用item.id !== array2.id做判断逻辑错误:array2是数组类型,本身不存在id属性,该判断永远返回true,无法实现去重和筛选重复项的效果。

修正后代码

let array1 = [
  { id: 1, name: "Oliver" },
  { id: 2, name: "Liam" },
];
let array2 = [
  { id: 1, name: "Oliver" },
  { id: 3, name: "James" },
  { id: 4, name: "Lucas" },
];

// 存储array1的所有id,用于快速校验重复
const array1IdSet = new Set(array1.map(item => item.id));
const duplicateNames = [];
const array2UniqueItems = [];

array2.forEach(item => {
  if (array1IdSet.has(item.id)) {
    // 收集重复项的名称
    duplicateNames.push(item.name);
  } else {
    // 收集array2中独有的新增项
    array2UniqueItems.push(item);
  }
})

// 合并得到去重后的完整数组
const newContact = [...array1, ...array2UniqueItems];

console.log("newContact :", newContact);
console.log("duplicateContacts:", duplicateNames.join(','));

实现逻辑

  • 用Set存储array1的id,判断重复的时间复杂度为O(1),比遍历数组判断效率更高
  • 遍历array2区分重复项和新增项,重复项收集名称,新增项单独存储
  • 合并array1和array2的新增项,得到无重复的合并数组
  • 最终输出结果和预期完全一致

内容的提问来源于stack exchange,提问作者Good

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:24:06