升级到Google Script V8后遍历数组仅返回索引而非值如何解决
问题原因
for...in语法的设计是遍历对象的可枚举属性名,应用到数组上时返回的就是数组的下标索引,而非对应位置的元素值,这就是你最终只拿到0-5的核心原因。- 你之前使用的
for each语法本身就是直接取元素值,迁移到V8运行时后直接替换为for...in自然会出现逻辑不匹配的问题。
修复方案
方案1:改用for...of直接遍历数组元素(V8运行时原生支持,逻辑和原for each完全一致)
var tabNumsFinal = []; for (var tabard of tabNumsVal) { if (tabard !== "") { tabNumsFinal.push(tabard); } }
for...of会直接返回数组每个位置的元素值,不需要额外处理。
方案2:保留索引遍历写法,手动读取元素值
如果要继续使用for...in写法,只需要通过索引获取对应位置的值即可:
var tabNumsFinal = []; for (var index in tabNumsVal) { var tabard = tabNumsVal[index]; if (tabard !== "") { tabNumsFinal.push(tabard); } }
方案3:用数组filter方法简化实现
符合现代JS写法,一行即可完成筛选逻辑:
var tabNumsFinal = tabNumsVal.filter(item => item !== "");
日志无输出问题补充
Google Apps Script V8运行时下建议改用console.log替代Logger.log,日志可以在脚本编辑器的「执行日志」面板查看,旧的Logger.log在触发类脚本运行的场景下经常会出现输出不显示的问题。
内容的提问来源于stack exchange,提问作者Random206
相关产品推荐
相关产品推荐

