如何使用JavaScript按指定字段(子项第二个元素)比较两个数组?
解决数组按子项指定元素找差异的问题
嘿,我来帮你搞定这个需求!你要的是从数组b里找出那些第二个元素在数组a中不存在的子项,对吧?我给你写个清晰高效的实现方案,步骤简单明了:
首先,我们先把数组a里所有子项的第二个元素提取出来存到一个Set里——用Set的好处是查找速度超快,比反复遍历数组效率高多了。接着遍历数组b,过滤出那些第二个元素不在这个Set里的项,就是我们要的resultAdd。
完整代码实现
var a = [ [1,'jake','abc',0 ], ['r', 'jenny','dbf',0] , ['r', 'white','dbf',0] ]; var b = [ ['s','jake','abc' ], [3, 'peter','xyf'] , ['r', 'red','dbf',0] ]; // 提取数组a中所有子项的第二个元素,存入Set用于快速查找 const aTargetValues = new Set(a.map(item => item[1])); // 过滤数组b,保留第二个元素不在aTargetValues中的项 var resultAdd = b.filter(item => !aTargetValues.has(item[1])); console.log(resultAdd); // 输出结果: [ [3, 'peter','xyf'], ['r', 'red','dbf',0] ]
代码逻辑解释
- 第一步:用
a.map(item => item[1])把数组a里每个子项的第二个元素提取出来,转成Set结构。Set的has()方法是O(1)时间复杂度,判断元素是否存在的效率远高于遍历数组。 - 第二步:用
b.filter()遍历数组b,对每个子项检查它的第二个元素是否不在aTargetValues集合中,符合条件的项会被保留下来,最终得到的就是你需要的差异结果。
这个方案逻辑清晰,不管数组规模多大,执行效率都很可观,也容易理解和维护。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

