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

使用indexOf()匹配Prompt输入值返回-1,硬编码值正常的问题求助

问题原因与解决方案

问题核心是类型不匹配:

  • 硬编码的4001是数字类型,和数组flatAssetIds里的ID类型一致,所以indexOf()能正常匹配;
  • 从ui.prompt()获取的输入是字符串类型,哪怕内容是"4001",和数组里的数字4001用严格相等(===)比较时会判定为不相等,导致indexOf()返回-1。

解决方法

把Prompt获取的字符串转换为数字即可,修改代码如下:

function clearRecentItem() {
  var ui = SpreadsheetApp.getUi();
  var result = ui.prompt('What ID number do you wish to delete?', ui.ButtonSet.OK_CANCEL);
  // 将输入的字符串转为数字
  var idToFind = parseInt(result.getResponseText(), 10);
  // 也可以用 Number(result.getResponseText()) 实现转换
  console.log("idtoFind:  "+idToFind);
  console.log(typeof idToFind); // 可打印类型确认是否转为number
  var flatAssetIds = rentalAssets.map(r => r[5]);
  var indexOfAsset = flatAssetIds.indexOf(idToFind);
  console.log(flatAssetIds);
  console.log(indexOfAsset);
  rental.getRange("B1").setValue(indexOfAsset);
  return; // actually more code follows but not relevant
}

排查小技巧

遇到这类匹配失效问题时,打印变量的类型能快速定位根源:

console.log(typeof idToFind);
console.log(typeof flatAssetIds[2]); // 打印数组中目标元素的类型,确认两者是否一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:47:14