如何对比两个JS数组,提取arr2独有的元素生成新数组arr3?
解决JS数组对比:提取arr2中独有的元素
没问题,我来帮你搞定这个数组对比的需求!核心是要根据pro_code字段判断元素是否存在,而不是直接比较对象(因为对象是引用类型,即使内容一样也会被判定为不同),下面是具体的实现方案:
实现思路
- 先把
arr1里所有元素的pro_code提取出来,存成一个Set集合——用Set的好处是查找元素的效率远高于数组,数据量大的时候优势明显。 - 遍历
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
相关产品推荐
相关产品推荐

