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

优化含对象的两个大数组交集计算的性能方案咨询

优化超大对象数组交集计算的性能

原代码用filter嵌套some的方式计算交集,本质是两层遍历,时间复杂度为O(n*m)——当两个数组都是超大级别的时候,这种嵌套遍历会导致运行耗时急剧上升,这就是性能瓶颈所在。

优化思路

把其中一个数组的匹配标识(这里是firstName+lastName的组合)提前存入哈希集合(Set),将原本O(m)的查找操作降到O(1),整体时间复杂度优化为O(n + m),大幅提升处理超大数组的效率。

优化后的代码

const arr1 = [  
    {  
       "number":"123",
       "firstName":"John",
       "lastName":"Smith",
       "email":"test1@test.com",
    },
    {  
       "number":"1234",
       "firstName":"Chad",
       "lastName":"Baker",
       "email":"test2@test.com",
    }
];
 
const arr2 = [  
    {  
        "number":"12345",
        "firstName":"Chad",
        "lastName":"Baker",
        "email":"test2@test.com",
    },
    {  
        "number":"123456",
        "firstName":"John",
        "lastName":"Smith",
        "email":"test1@test.com",
    }
];

// 先将arr2的姓名组合存入Set,一次遍历完成
const nameSet = new Set(arr2.map(item => `${item.firstName}-${item.lastName}`));

// 遍历arr1,用Set快速判断是否存在匹配项
const arr3 = arr1.filter(item => {
  const key = `${item.firstName}-${item.lastName}`;
  return nameSet.has(key);
});

console.log(arr3);

补充说明

  • 如果担心姓名中包含-导致键冲突,可以换用不会出现在字段中的特殊分隔符,比如${item.firstName}||${item.lastName}或者空字符\u0000
  • 要是需要基于多个字段匹配,只需要把所有参与匹配的字段组合成唯一键存入Set即可,逻辑完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:34:58