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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:31:09