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

使用Lambda函数从两个TypeScript对象数组中查找共同对象

用TypeScript提取两个对象数组的共同元素

嘿,这个需求挺常见的,咱们完全可以用原生TypeScript/JavaScript的方法搞定,不用依赖任何第三方库~

方法一:基于唯一ID(推荐,性能更优)

既然每个对象都有唯一的id字段,咱们可以利用这个标识来高效筛选,这种方法的时间复杂度是O(n+m),比双重循环的O(n*m)要高效得多,数组越大优势越明显。

// 先定义类型让代码更规范(TypeScript专属)
interface Vehicle {
  id: number;
  name: string;
}

const firstArray: Vehicle[] = [ { "id": 4, "name": "Tata" }, { "id": 11, "name": "Maruti" }, { "id": 14, "name": "Mahindra" } ];
const secondArray: Vehicle[] = [ { "id": 4, "name": "Tata" }, { "id": 11, "name": "Maruti" }, { "id": 15, "name": "Hyundai" }, { "id": 21, "name": "Honda" } ];

// 第一步:把第一个数组的id存入Set,实现O(1)时间的快速查找
const firstIds = new Set(firstArray.map(item => item.id));

// 第二步:遍历第二个数组,筛选出id在Set中的对象
const commonElements = secondArray.filter(item => firstIds.has(item.id));

console.log(commonElements);
// 输出:[ { id: 4, name: 'Tata' }, { id: 11, name: 'Maruti' } ]

方法二:严格比对所有属性(适合需要完全匹配的场景)

如果你的场景里id可能不唯一,或者需要确保对象的所有属性都完全一致,可以用这个方法。注意这是浅比对,如果对象有嵌套属性,需要改成深比对逻辑。

interface Vehicle {
  id: number;
  name: string;
}

const firstArray: Vehicle[] = [ { "id": 4, "name": "Tata" }, { "id": 11, "name": "Maruti" }, { "id": 14, "name": "Mahindra" } ];
const secondArray: Vehicle[] = [ { "id": 4, "name": "Tata" }, { "id": 11, "name": "Maruti" }, { "id": 15, "name": "Hyundai" }, { "id": 21, "name": "Honda" } ];

// 自定义对象比对函数:浅比对所有属性
function areObjectsEqual(obj1: Vehicle, obj2: Vehicle): boolean {
  const keys1 = Object.keys(obj1);
  const keys2 = Object.keys(obj2);
  
  // 先判断键的数量是否一致
  if (keys1.length !== keys2.length) return false;
  
  // 逐个比对每个键对应的值
  for (const key of keys1) {
    // 这里用类型断言确保key是Vehicle的属性
    if (obj1[key as keyof Vehicle] !== obj2[key as keyof Vehicle]) {
      return false;
    }
  }
  return true;
}

// 筛选出两个数组中完全匹配的对象
const commonElements = firstArray.filter(item1 => 
  secondArray.some(item2 => areObjectsEqual(item1, item2))
);

console.log(commonElements);
// 输出同样是目标结果

简单解释下两种方法的区别:

  • 方法一依赖唯一ID,性能拉满,是绝大多数场景的首选;
  • 方法二做全属性比对,更严谨但性能稍差,适合对匹配精度要求极高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:21:05