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
相关产品推荐
相关产品推荐

