GAS中数组map传入DriveApp.getFileById报参数不匹配异常是什么原因?
两种写法的差异与报错原因
核心本质:Array.map() 默认会给回调函数传递3个参数
你遇到的问题和Google Apps Script本身无关,是JavaScript原生Array.prototype.map()的传参规则导致的:map调用传入的回调函数时,会依次传入3个参数:
- 第一个:当前遍历到的数组元素
- 第二个:当前元素对应的索引(数字类型)
- 第三个:调用
map的原数组本身
第一种写法的问题
你写的.map(DriveApp.getFileById)相当于直接把getFileById方法作为回调交给map执行,map会把上面提到的3个参数全部传给getFileById。
而根据官方定义,DriveApp.getFileById只接收1个字符串类型的文件ID作为入参,多传入的索引、数组参数就会触发参数不匹配的异常,和你收到的报错parameters (String,number,number[]) don't match完全对应:第一个参数是字符串ID、第二个是数字索引、第三个是数组。
第二种写法正常的原因
你包了一层箭头函数.map(id=>DriveApp.getFileById(id))时,相当于你手动接收了map传入的第一个参数id,只把这一个参数传给getFileById,剩下的索引、数组参数被你主动忽略了,刚好符合方法的入参要求,因此可以正常运行。
同类JS经典坑参考:
['1','2','3'].map(parseInt)返回[1,NaN,NaN],也是因为parseInt接收两个参数(要转的字符串、进制基数),map把索引当成进制基数传入导致的异常。
内容的提问来源于stack exchange,提问作者aiotter
相关产品推荐
相关产品推荐

