You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script中getValues()获取数据indexOf匹配日期返回-1

问题描述

调用工作表getRange().getValues()方法获取指定范围数据时,日志输出的处理后数据没有方括号[]包裹,只有手动创建的数组能正常操作。需要使用indexOf方法定位特定日期,实际业务中待匹配的日期也从工作表提取。
测试代码如下:

function testArray() {
  var rowTwoDates = playgroundSheet.getRange(2, 59, 1, 5).getValues();
  var strippedRowTwoDates = rowTwoDates[0].map(stripTime);
  Logger.log('array:  ' + strippedRowTwoDates);
  Logger.log('indexOf:  ' + strippedRowTwoDates[0].indexOf("06/09/2022"));
  var scores = [10, 20, 30, 10, 40, 20];
  Logger.log(scores);
  Logger.log(scores.indexOf(30));
}

运行日志:

9:38:23 AM  Notice  Execution started
9:38:24 AM  Info    array:  06/07/2022,06/08/2022,06/09/2022,06/10/2022,06/11/2022
9:38:24 AM  Info    indexOf:  -1
9:38:24 AM  Info    [10.0, 20.0, 30.0, 10.0, 40.0, 20.0]
9:38:24 AM  Info    2.0
9:38:24 AM  Notice  Execution completed
原因分析
  • 日志无方括号不代表返回值不是标准数组:使用'array: ' + strippedRowTwoDates的写法做日志输出时,JS会自动调用数组的toString()方法,将数组元素按逗号拼接为纯字符串,不会保留方括号格式。手动创建的scores数组是直接传入Logger.log(),日志方法会序列化输出完整数组结构,二者只是打印逻辑不同,和数组本身结构无关。
  • indexOf返回-1是数组层级取值错误:getValues()返回的是二维数组,结构为[[单元格1值, 单元格2值, ...]],执行rowTwoDates[0].map(stripTime)后得到的strippedRowTwoDates已经是存储所有日期字符串的一维数组。后续代码写strippedRowTwoDates[0].indexOf(),实际是取出数组第一个元素(即字符串"06/07/2022"),在这个单个字符串里查找"06/09/2022"子串,自然匹配失败返回-1。
修复方法

删除indexOf调用前多余的[0]取值,直接对处理好的一维日期数组调用方法即可:

function testArray() {
  var rowTwoDates = playgroundSheet.getRange(2, 59, 1, 5).getValues();
  var strippedRowTwoDates = rowTwoDates[0].map(stripTime);
  Logger.log('array:  ' + strippedRowTwoDates);
  // 修正层级,直接对一维数组调用indexOf
  Logger.log('indexOf:  ' + strippedRowTwoDates.indexOf("06/09/2022"));
  var scores = [10, 20, 30, 10, 40, 20];
  Logger.log(scores);
  Logger.log(scores.indexOf(30));
}

排查提示:不确定数组结构时,直接将数组变量传入Logger.log(),不要做字符串拼接,即可看到完整的数组结构、元素类型,避免层级判断错误。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:36:28