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

如何基于指定列去除多维数组中的重复项

二维数组按任意指定列去重的实现

你现有的代码只能按第一列(Header1)去重,核心原因是用了解构([key])直接取了数组的第一个元素作为判断重复的标识。要实现按指定列(比如Header2)或任意列p去重,只需修改获取去重判断键的逻辑即可,以下是具体实现方案:

一、按指定列(如Header2)去重

Header2对应数组的第2个元素,索引为1(数组索引从0开始计数),修改filter回调中取键的逻辑即可:

function dedupByHeader2() {
  const data = [
    ['Header1', 'Header2'],
    ['S01', 'C01'],
    ['S01', 'C02'],
    ['S02', 'C03'],
    ['S04', 'C02'] // 新增Header2重复的测试用例
  ];
  const seen = {};
  // 取数组第2个元素(索引1)作为去重判断键
  const result = data.filter(item => {
    const key = item[1];
    return !seen[key] && (seen[key] = true);
  });
  console.log(result);
}

执行后会保留首次出现的['S01', 'C01']、['S01', 'C02']、['S02', 'C03'],自动剔除后续重复的['S04', 'C02']。

二、泛化到任意指定列p的通用函数

将目标列的索引作为参数传入函数,即可实现对任意列的去重(注意列索引p从0开始计数,比如Header1对应p=0,Header2对应p=1):

function dedupByColumn(data, columnIndex) {
  const seen = {};
  return data.filter(item => {
    const key = item[columnIndex];
    // 处理数组长度不足指定列的情况,默认保留该元素
    if (key === undefined) return true;
    return !seen[key] && (seen[key] = true);
  });
}

// 使用示例
const data = [
  ['Header1', 'Header2'],
  ['S01', 'C01'],
  ['S01', 'C02'],
  ['S02', 'C03'],
  ['S04', 'C02']
];
// 按Header2(索引1)去重
const resultByHeader2 = dedupByColumn(data, 1);
// 按Header1(索引0)去重
const resultByHeader1 = dedupByColumn(data, 0);

console.log('按Header2去重结果:', resultByHeader2);
console.log('按Header1去重结果:', resultByHeader1);

特殊场景处理

如果去重键是对象、数组等复杂类型,普通对象seen无法正确存储,需改用Map实现:

function dedupByColumnComplex(data, columnIndex) {
  const seen = new Map();
  return data.filter(item => {
    const key = item[columnIndex];
    if (!seen.has(key)) {
      seen.set(key, true);
      return true;
    }
    return false;
  });
}

内容的提问来源于stack exchange,提问作者Einarr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:23:21