使用getRange获取整列数据以调用indexOf方法的Google Apps Script问题
问题原因
Google Apps Script 中 Range.getValues() 固定返回二维数组,结构为 [行1数组, 行2数组, 行3数组...],每一行的子数组结构为 [列1值, 列2值, 列3值...]:
- 读取单行数据时加
[0]是取第一行的子数组,自然得到一维的行数据 - 读取单列数据时,返回的二维数组结构为
[[列1行1值], [列1行2值], [列1行3值]...],每个元素都是只有一个值的子数组,直接加[0]仅能拿到第一行的单列值,所以只会返回左上角单元格内容
解决方法
只需要把单列返回的二维数组展平为一维数组即可,提供两种常用写法:
方法1:用flat()直接展平(写法最简单)
var lookupTerr = masterAvail.getRange(1,1,lastRow,1).getValues().flat();
方法2:用map提取每个子数组的首个元素(兼容性更好,逻辑更明确)
var lookupTerr = masterAvail.getRange(1,1,lastRow,1).getValues().map(row => row[0]);
额外注意事项
原代码里写的lookupTerr.indexof(apptTerr)存在语法错误,JavaScript 中数组的查找方法是indexOf,第二个字母O要大写,小写的indexof会报方法不存在的错误。
修正后的查找逻辑可以正常运行:
var terrIndex = lookupTerr.indexOf(apptTerr)+4;
内容的提问来源于stack exchange,提问作者Smgrant4
相关产品推荐
相关产品推荐

