如何检查Google Apps Script嵌套数组是否不含指定颜色代码#377a47
问题原因
Google Apps Script 中Range.getBackgrounds()方法固定返回二维数组,结构为[行索引][列索引]。即使你选取的是单列20行的范围,返回结果也是20个长度为1的子数组,每个子数组存储对应单元格的背景色字符串。
你直接在外层数组调用includes(字符串)时,匹配目标是外层数组的元素(也就是子数组),永远不可能和字符串匹配成功,因此不管传入的颜色是否存在,判断结果都会出错。
可行方案
方案1:扁平化数组后判断
用flat()将二维数组拍平为一维的颜色字符串数组,再直接调用includes判断即可,写法最简洁:
const targetColor = "#377a47"; // 获取背景色后直接拍平为一维数组 const bgColors = sheet.getRange(1, 1, 20, 1).getBackgrounds().flat(); // 不存在目标色时返回true const isNotContainTarget = !bgColors.includes(targetColor); console.log(isNotContainTarget);
方案2:遍历二维数组判断
如果不想修改原数组结构,可以用some()方法遍历判断,该方法只要检测到有一个元素符合条件就会返回true,还可以适配任意行列数的范围:
const targetColor = "#377a47"; const bgColors = sheet.getRange(1, 1, 20, 1).getBackgrounds(); // 单列场景判断:只要任意一行的第一个元素等于目标色,就说明存在 const isNotContainTarget = !bgColors.some(row => row[0] === targetColor); // 通用适配任意行列范围的写法,不用关心选了多少列 // const isNotContainTarget = !bgColors.some(row => row.includes(targetColor));
注意:你在控制台打印看到的数组内颜色值没有引号,是控制台的显示格式问题,实际返回的颜色值都是标准字符串,直接做全等判断即可,不需要额外格式处理。
内容的提问来源于stack exchange,提问作者HTTP ERROR 500
相关产品推荐
相关产品推荐

