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

如何提取两个JavaScript数组中的重复对象?

找出两个数组中id相同的对象交集

嘿,我来帮你搞定这个需求!要得到两个数组里id相同的对象组成的新数组,有几种简单实用的方法,我给你一步步讲清楚:

方法1:直观的filter + some组合

这是最容易理解的方式,直接遍历其中一个数组,检查另一个数组里是否存在id相同的对象:

var array1 = [{ id: 1 }, { id: 4}, { id: 3 }];
var array2 = [{ id: 1 }, { id: 2}];

const intersection = array1.filter(itemFromArr1 => 
  array2.some(itemFromArr2 => itemFromArr1.id === itemFromArr2.id)
);

console.log(intersection); // 输出: [{ id: 1 }]
  • filter 负责筛选array1中符合条件的元素
  • some 用来判断array2里是否存在和当前元素id一致的对象,只要找到一个就返回true

方法2:用Set优化性能(适合大数据量)

如果你的数组元素很多,上面的方法因为每次都要遍历array2,性能会有点慢。这时候可以先把array2的id存到Set里,利用Set的快速查找特性来优化:

var array1 = [{ id: 1 }, { id: 4}, { id: 3 }];
var array2 = [{ id: 1 }, { id: 2}];

// 先提取array2的所有id到Set中
const arr2IdSet = new Set(array2.map(item => item.id));
// 筛选array1中id存在于Set里的元素
const intersection = array1.filter(item => arr2IdSet.has(item.id));

console.log(intersection); // 输出: [{ id: 1 }]

Set的has方法查找时间复杂度是O(1),比some的O(n)高效很多,数组越大,性能提升越明显。

补充说明

  • 上面的例子都是基于id属性判断对象是否“相同”,如果需要匹配多个属性,只需要调整判断条件即可,比如:
    // 匹配id和name都相同的对象
    array1.filter(item1 => 
      array2.some(item2 => item1.id === item2.id && item1.name === item2.name)
    );
    
  • 如果你需要从array2里取匹配的对象,只需要把filter的数组换成array2就行,逻辑是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:34:52