Google Apps Script中.findIndex()报错:传入字符串提示‘不是函数’
解决.findIndex()传入字符串报错的问题
嘿,这问题很常见——你把.findIndex()的调用方式搞错啦!它可不是直接传要找的值就行的,得给它一个回调函数来判断每一项是否匹配。
问题根源
你现在写的columnValues.findIndex(identityNumber)是错误的,原因有两个:
.findIndex()要求参数是一个函数,而你传了字符串identityNumber,所以JS会直接抛出“不是函数”的错误- 另外,
SS.getRange(...).getValues()返回的是二维数组(比如[[ID1], [ID2], [ID3]]),每一行的单元格值都包裹在一个子数组里,就算你传对了参数,直接比较也匹配不上目标值。
修正代码
把报错的那一行改成这样:
var searchResult = columnValues.findIndex(row => row[0] === identityNumber);
代码解释
row => row[0] === identityNumber是一个箭头函数,作为.findIndex()的回调逻辑:- 它会遍历
columnValues里的每一项(也就是表格里的每一行子数组) - 用
row[0]取出子数组里的第一个元素(也就是表格第一列的物业ID值) - 和你从邮件里提取的
identityNumber做严格相等比较
- 它会遍历
- 如果找到匹配项,
.findIndex()会返回它的索引;找不到则返回-1,建议你在后续逻辑里加个判断避免出错,比如:
if (searchResult === -1) { // 处理找不到匹配ID的情况,比如标记邮件后跳过回复 thread.markRead(); return; } // 继续执行房产信息获取和邮件回复逻辑
额外提示
还要注意类型匹配问题:如果表格里的物业ID是数字类型,而你从邮件里提取的identityNumber是字符串,那严格相等===会匹配失败。这时候可以把identityNumber转换成数字,比如:
var identityNumber = parseInt(msgBody.split("\n")[1].replace('Property ID: ',''), 10);
内容的提问来源于stack exchange,提问作者Bjaeg
相关产品推荐
相关产品推荐

