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

如何对比两个JS数组,提取arr2独有的元素生成新数组arr3?

解决JS数组对比:提取arr2中独有的元素

没问题,我来帮你搞定这个数组对比的需求!核心是要根据pro_code字段判断元素是否存在,而不是直接比较对象(因为对象是引用类型,即使内容一样也会被判定为不同),下面是具体的实现方案:

实现思路

  1. 先把arr1里所有元素的pro_code提取出来,存成一个Set集合——用Set的好处是查找元素的效率远高于数组,数据量大的时候优势明显。
  2. 遍历arr2,筛选出pro_code不在这个Set里的元素,这些就是我们要的arr3。

完整代码示例

// 你的示例数组
const arr1 = [
  {des:"cont1", note:"cont1", pro_code:"XXY"},
  {des:"cont2", note:"cont2", pro_code:"NNB"},
  {des:"cont4", note:"cont4", pro_code:"QQA"},
  {des:"cont5", note:"cont5", pro_code:"GFD"}
];

const arr2 = [
  {des:"cont1", note:"cont1", pro_code:"XXY"},
  {des:"cont2", note:"cont2", pro_code:"NNB"},
  {des:"cont3", note:"cont3", pro_code:"QAS"}
];

// 步骤1:提取arr1的pro_code到Set
const arr1ProCodes = new Set(arr1.map(item => item.pro_code));

// 步骤2:筛选arr2中独有的元素
const arr3 = arr2.filter(item => !arr1ProCodes.has(item.pro_code));

console.log(arr3);
// 输出:[{ des: "cont3", note: "cont3", pro_code: "QAS" }]

为什么之前的代码可能失效?

如果你之前尝试用arr2.filter(item => !arr1.includes(item)),这种写法是错误的——因为JS里对象是引用类型,哪怕两个对象的内容完全一致,它们的内存地址不同,includes就会判定为不存在。所以必须通过具体的字段(比如pro_code)来做存在性判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:27:54