使用map从数组取值时最后一个元素未被纳入变量的技术求助
问题分析与解决方案
你的问题出在错误地使用了arrJSONS.map()来遍历当前行的列,而arrJSONS是一个二维数组,map()在这里会遍历整个数组的所有行,而不是你需要的当前行的列。
错误原因拆解
看你这段代码:
let [nameJSON, turnON, nameTABLE, nameARR, nameDIR, idDIR] = arrJSONS.map(() => { Logger.log(`element ${j}: ${arrJSONS[i][j]}`); let vOut = arrJSONS[i][j]; j++; return vOut; });
arrJSONS.map()的回调函数会执行arrJSONS的行数次,而不是当前行的列数(6次)。如果你的arrJSONS只有5行,那map只会执行5次,自然只能拿到前5个变量的值,最后一个idDIR就会缺失。- 这种写法逻辑完全错误:你想要的是提取当前行
arrJSONS[i]的6个元素,但你却在遍历整个二维数组的行。
正确的解决方案
其实你根本不需要用map(),直接对当前行进行数组解构就可以了,因为arrJSONS[i]本身就是一个包含6个元素的数组(对应表格T:Y列的一行数据):
function jobForWork(){ for (var i = 0; i < arrJSONS.length; i ++){ // 直接解构当前行的6个元素到对应变量 let [nameJSON, turnON, nameTABLE, nameARR, nameDIR, idDIR] = arrJSONS[i]; /// 你的后续操作逻辑不变 if (nameJSON == "jobToRTS") start(nameDIR, idDIR); if (nameDIR == "IN_CAF") next(nameTABLE, nameARR); if (turnON) finish(nameJSON); /// ... } }
额外优化建议
如果担心某些行的元素数量不足6个(比如表格里有空白行),可以给变量设置默认值,避免报错:
let [nameJSON = "", turnON = false, nameTABLE = "", nameARR = "", nameDIR = "", idDIR = ""] = arrJSONS[i];
这样就能确保每个变量都有值,不会因为行数据缺失导致undefined的问题。
内容的提问来源于stack exchange,提问作者Dmitriy Rudakov
相关产品推荐
相关产品推荐

