JavaScript如何提取二维数组中首字段值重复的子数组
二维数组按首字段查找重复子数组实现
原有一维数组重复项查找实现逻辑非常简洁,核心是通过filter遍历,判断当前元素首次出现的索引是否不等于当前索引,以此筛选出重复项,代码如下:
const findDuplicates = (dataArray) => { const duplicates = dataArray.filter((e, index, arr) => arr.indexOf(e) !== index); return duplicates; };
传入一维数组['123456', '787877', '763223', '787877', '854544']时,该函数会返回重复值['787877']。
如果要适配二维数组场景,要求仅以子数组第一个字段作为重复判断依据,返回所有首字段存在重复的完整子数组,只需要调整判断逻辑即可。
注意原一维方法的逻辑只会返回非首次出现的重复项,无法覆盖首次出现的重复记录,不符合当前场景需要返回所有关联子数组的要求,因此可以先统计首字段的出现频次,再做筛选,实现代码如下:
const find2DDuplicates = (dataArray) => { // 统计每个首字段的出现次数 const fieldCount = new Map(); dataArray.forEach(item => { const firstField = item[0]; fieldCount.set(firstField, (fieldCount.get(firstField) || 0) + 1); }); // 筛选所有首字段出现次数大于1的子数组 return dataArray.filter(item => fieldCount.get(item[0]) > 1); };
传入测试用的二维数组:
const testArr = [ ['123456', 'Smith'], ['787877', 'Jones'], ['763223', 'Waldo'], ['787877', 'Quagmire'], ['854544', 'Miller'] ]; console.log(find2DDuplicates(testArr));
执行后返回结果完全符合预期:
[['787877', 'Jones'], ['787877', 'Quagmire']]
内容的提问来源于stack exchange,提问作者jenkinz
相关产品推荐
相关产品推荐

