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

使用Google Apps Script按多列动态获取二维数组唯一值

多列动态去重实现方案

核心改动点

  • 函数新增第二个入参keyColumns,接收存储目标列索引的数组,支持传入任意数量的列索引
  • 排序、重复判断逻辑全部基于传入的列索引动态生成,不再硬编码固定列值
  • 兼容原有单索引0列去重的调用逻辑,无破坏性变更

改造后完整代码

function getUniqueData_(arr, keyColumns = [0]) {
  // 多列排序比较逻辑:按传入列的顺序逐列比对排序
  const multiColCompare = (a, b) => {
    for (const colIndex of keyColumns) {
      if (a[colIndex] !== b[colIndex]) {
        return a[colIndex] < b[colIndex] ? -1 : 1
      }
    }
    return 0
  }

  // 浅拷贝原数组后排序,避免修改原数组
  const sortedArr = [...arr].sort(multiColCompare)

  // 重复行判断:所有指定列的值完全相等则判定为重复
  const isDuplicate = (row1, row2) => {
    return keyColumns.every(colIndex => row1[colIndex] === row2[colIndex])
  }

  // 遍历去重
  return sortedArr.reduce((result, currentRow) => {
    const existIndex = result.findIndex(row => isDuplicate(row, currentRow))
    if (existIndex === -1) {
      result.push(currentRow)
    }
    return result
  }, [])
}

使用示例

  • 按单列(第1列,索引0)去重,和原代码逻辑完全一致:
const demoData = [
  [1, '产品A', '华东'],
  [2, '产品B', '华北'],
  [1, '产品A', '华南'],
  [2, '产品C', '西南']
]

// 仅按索引0列去重
console.log(getUniqueData_(demoData, [0]))
// 输出结果:[[1,'产品A','华东'], [2,'产品B','华北']]
  • 按多列(第1、2列,索引0、1)组合去重:
// 按索引0、1两个列的组合值去重
console.log(getUniqueData_(demoData, [0, 1]))
// 输出结果:[[1,'产品A','华东'], [2,'产品B','华北'], [2,'产品C','西南']]

提示:如果调用时不传入第二个参数,函数默认使用[0]作为去重依据,即按第一列去重,原有代码的调用方式不需要修改即可正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:01:14