使用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
相关产品推荐
相关产品推荐

