Apps Script对比Google Sheets列数组值匹配失败问题求助
问题核心原因
Range.getValues() 方法的返回值为二维数组,即便你读取的是单列数据,返回结构也是 [[单元格1值], [单元格2值], [单元格3值], ...],每一个 a[i] 都是存储单个单元格值的子数组。
在JavaScript中直接用 == 对比两个数组时,判断的是数组的内存引用地址是否相同,而非数组内存储的内容是否一致。你之前测试自行声明的一维简单数组时逻辑正常,就是因为此时对比的是基础类型的值而非数组引用,自然不会出现匹配失败的问题。
修复方案
有两种常用修改方式,任选其一即可:
方案1:读取数据时直接转为一维数组
调用flat()方法将二维数组拍平为存储基础类型值的一维数组,后续逻辑无需改动:
let z = sheet.getRange("D2:D" + sheet.getLastRow()) // 拍平二维数组为一维 let a = z.getValues().flat() for (let i = 0; i < a.length; i++) { for (let k = i + 1; k < a.length; k++) { if (a[i] == a[k]) { console.log("hit") } } }
方案2:对比时指定取子数组的首个元素
不修改原数组结构,对比时直接取子数组第0位的单元格实际值进行判断:
let z = sheet.getRange("D2:D" + sheet.getLastRow()) let a = z.getValues() for (let i = 0; i < a.length; i++) { for (let k = i + 1; k < a.length; k++) { // 取子数组第0位的实际值对比 if (a[i][0] == a[k][0]) { console.log("hit") } } }
补充说明:如果需要严格区分值的类型(比如避免字符串格式的
'123'和数字格式的123被判定为相同),可以将对比符替换为===。
内容的提问来源于stack exchange,提问作者nBar
相关产品推荐
相关产品推荐

