如何对比两个对象数组并仅输出不匹配的元素?
高效筛选数组中不匹配的对象
要从arrA里筛选出Name不存在于arrB的对象,最高效的方案是借助Set数据结构优化查找效率,具体步骤如下:
- 先把
arrB里所有Name值提取出来存入Set——Set的查找操作时间复杂度是O(1),比直接遍历数组查找的O(n)快得多 - 遍历
arrA,过滤掉Name在Set中的对象,剩下的就是目标结果
代码实现
var arrA = [ {Name: "A"}, {Name: "C"}, {Name: "F"}, {Name: "G"}, ] var arrB = [ {Name: "C"}, {Name: "J"}, {Name: "I"}, ] // 提取arrB的Name集合 const bNameSet = new Set(arrB.map(item => item.Name)); // 过滤arrA得到不匹配的对象 const result = arrA.filter(item => !bNameSet.has(item.Name)); console.log(result);
输出结果
[ {Name: "A"}, {Name: "F"}, {Name: "G"}, ]
效率说明
这种方法的整体时间复杂度是O(m + n)(m是arrA的长度,n是arrB的长度),相比嵌套循环遍历的O(m*n),在数组元素较多时性能提升显著,是处理此类数组匹配问题的最优方案之一。
内容的提问来源于stack exchange,提问作者Anon_J
相关产品推荐
相关产品推荐

