使用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
相关产品推荐
相关产品推荐

