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

JS调用Google Apps Script查询表格时indexOf始终返回-1问题求助

问题根因

SpreadsheetApp 类的getValues()方法返回值为二维数组,结构为[ [行1列1值, 行1列2值...], [行2列1值, 行2列2值...] ]。你当前查询的是单列范围A2:A17,所以得到的ctList是每一项为单元素子数组的结构:[ ['ABC'], ['CDE'], ['EFG']... ]
直接对二维数组调用indexOf(字符串)时,是将子数组和字符串做全等匹配,二者类型不一致,所以永远返回-1,和内容是否一致无关。

修复方案

方案1:将二维数组拍平为一维数组后匹配

提取每一个子数组的第一个元素,生成普通一维字符串数组,再调用indexOf即可正常匹配:

function getAgent(ai){
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Updated");
  // 用map提取每个子数组的第一个元素,生成一维数组
  var ctList = ws.getRange('A2:A17').getValues().map(item => item[0]);
  var position = ctList.indexOf(ai);
  return position;
}

方案2:保留原始二维数组,手动遍历匹配

如果后续逻辑需要用到原始二维数组结构,可以自行遍历匹配每一项的首个元素:

function getAgent(ai){
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Updated");
  var ctList = ws.getRange('A2:A17').getValues();
  for(let i = 0; i < ctList.length; i++){
    // 匹配到对应值直接返回索引
    if(ctList[i][0] === ai) return i;
    // 如果存在隐形空格匹配失败,可改为两边加trim():
    // if(ctList[i][0].trim() === ai.trim()) return i;
  }
  // 未匹配到返回-1
  return -1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:07