如何高效实现两个对象数组基于nt字段的匹配过滤
高效匹配两个数组中指定字段的元素
嘿,我完全懂你嵌套循环效率低的苦恼——数据量一大,O(n²)的复杂度真的会拖慢程序!咱们可以用**哈希集合(Set)**来把时间复杂度降到O(n+m),轻松解决这个问题,步骤很简单:
思路解析
- 先把
arr1里所有的nt字段值提取出来,存到一个Set中(Set的查找操作是O(1)级别的,比数组遍历快太多) - 遍历
arr2,过滤出nt字段存在于这个Set中的元素
代码实现
var arr1 = [{'_id':'192983','nt':'1246699993'},{'_id':'192984','nt':'1246699994'}]; var arr2 = [{'title':'ABX1','nt':'2398389'},{'title':'ABX2','nt':'1246699994'}]; // 提取arr1的nt值到Set中 const ntMatchSet = new Set(arr1.map(item => item.nt)); // 过滤arr2得到匹配结果 const matchedResult = arr2.filter(item => ntMatchSet.has(item.nt)); console.log(matchedResult); // 输出:[{"title":"ABX2","nt":"1246699994"}]
为什么这个方法更高效?
- 原来的嵌套循环:每个
arr2元素都要遍历整个arr1去匹配,时间复杂度是O(n*m)(n是arr1长度,m是arr2长度) - 现在的方法:只需要遍历两次数组——一次构建Set(O(n)),一次过滤arr2(O(m)),总时间复杂度是O(n+m),数据量越大,效率提升越明显!
而且如果arr1里有重复的nt值也没关系,Set会自动去重,不影响最终的匹配结果~
内容的提问来源于stack exchange,提问作者Testimg198
相关产品推荐
相关产品推荐

