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

JavaScript如何比较两个JSON对象并追加唯一不重复数据项

问题根源

你的现有代码逻辑错误是:对每个服务端数据项item1,会遍历所有本地database的项,只要有任意一个本地项和item1不匹配,就会把item1推入新增列表。比如本地有3条数据,一个新的item1会被匹配3次,就会被重复推入3次,这就是输出出现大量重复项的原因。

最优解决方案(推荐)

先把本地数据的唯一标识(value + country组合)存入Set,查找速度为O(1),适合数据量较大的场景:

// 生成本地已存在数据的唯一键集合
const existingKeys = new Set(database.map(item => `${item.value}_${item.country}`));
const additions = [];

for (const item of data) {
  const currentKey = `${item.value}_${item.country}`;
  // 仅本地不存在的项才追加
  if (!existingKeys.has(currentKey)) {
    additions.push(item);
    // 可选:将新增项的键加入集合,避免本次服务端返回重复数据被多次添加
    existingKeys.add(currentKey);
  }
}

// 最终输出 = 原有本地数据 + 不重复的新增数据
const output = [...database, ...additions];

轻量场景备选方案

如果数据量很小,可以用some简化写法,时间复杂度为O(n*m):

// 筛选出服务端返回、且本地不存在的项
const additions = data.filter(item1 => 
  !database.some(item2 => item1.value === item2.value && item1.country === item2.country)
);
const output = [...database, ...additions];

两种方案都完全符合你给出的示例预期,不会出现重复添加的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:54:03