Google Apps Script中二维数组元素求和失败的技术问询
解决Google Apps Script中二维数组求和问题
问题根源
你从表格获取的test是二维数组(getValues()返回行×列的嵌套数组),直接对二维数组做遍历或reduce会因为操作的是子数组而非单个数值,导致结果错误或类型异常。
你的代码错误点
testSum函数:遍历的i是每一行的子数组,total += i会将数组转为字符串拼接,而非数值累加,结果不是正确总和。- 重复赋值
test1:先执行test.flat()扁平化数组,但随后用test.reduce(...)覆盖了test1,且直接对二维数组test用reduce时,b是子数组,同样会触发字符串拼接。
正确解法
方法1:扁平化数组后求和(最简洁)
先把二维数组转成一维数组,再用reduce累加,同时处理空单元格避免NaN:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var test = sheet.getRange(13, 6, 4, 24).getValues(); // 扁平化二维数组,再累加,空单元格按0处理 var total = test.flat().reduce((sum, num) => sum + (num || 0), 0); Logger.log(total); // 打印总和
方法2:嵌套循环遍历
通过两层循环逐个访问每个数值:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var test = sheet.getRange(13, 6, 4, 24).getValues(); let total = 0; for (const row of test) { for (const num of row) { total += num || 0; // 空单元格视为0 } } Logger.log(total);
方法3:嵌套reduce处理二维数组
无需扁平化,直接用两层reduce分别处理行和列:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var test = sheet.getRange(13, 6, 4, 24).getValues(); var total = test.reduce((rowTotal, row) => { return rowTotal + row.reduce((colTotal, num) => colTotal + (num || 0), 0); }, 0); Logger.log(total);
内容的提问来源于stack exchange,提问作者David Abbott
相关产品推荐
相关产品推荐

