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

JavaScript中如何判断两个JSON数组是否存在相同对象元素

问题根因

JavaScript 中的 includes() 方法对对象这类引用类型是按内存引用地址比对的,而非按对象的内容值匹配。即使两个对象的字段、取值完全一致,只要是不同的实例,includes() 都会判定为不相等,这就是你的代码对基础类型数组有效、对对象数组失效的原因。

解决方案

方案1:指定字段比对(性能最优,适配你的需求场景)

你的需求只需要校验name和year两个字段是否匹配,直接双重遍历比对指定字段即可:

const found_prod_and_year = json1.some(item1 => {
  return json2.some(item2 => item1.name === item2.name && item1.year === item2.year)
})

最终返回的布尔值就是你需要的结果:存在任意匹配项返回true,无匹配返回false。

方案2:全字段通用比对(适合字段不固定的场景)

如果需要比对对象的所有字段,可以先将对象序列化为JSON字符串后再做匹配,为了提升性能可以先把第二组数据的序列化结果存入Set:

const json2StrSet = new Set(json2.map(item => JSON.stringify(item)))
const found_prod_and_year = json1.some(item => json2StrSet.has(JSON.stringify(item)))

注意该方案存在限制:如果对象中包含函数、undefined、Symbol这类JSON序列化会丢失的属性,该方法不适用,需手动编写全量字段比对逻辑或使用深比较工具函数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:15:03