嵌套for循环满足if SUM条件时数组追加值不生效问题求解
问题根因
你代码中内层循环不执行的核心原因是:当filters[i].$4 === "SUM"时,filters[i].$9不是数组类型,因此filters[i].$9.length返回undefined或0,内层for循环的判断条件a < filters[i].$9.length不成立,循环体直接被跳过,因此内层的if判断和日志都不会触发。
修复方案
你需要对SUM类型和非SUM类型的元素分开处理,SUM类型不需要遍历$9字段,直接为转置数组的每一行对应列赋值即可,代码修改如下:
var transposeArr = new Array() for (let i = 0; i < filters.length; i++) { const isSum = filters[i].$4 === "SUM" if(isSum){ console.log("Outer loop : success") // SUM类型不需要遍历$9,直接给已有的所有行的当前列赋值 if (transposeArr.length === 0) { // 处理SUM是第一个元素的情况,先初始化一行 transposeArr.push([]) } transposeArr.forEach(row => { row[i] = "Success" }) continue // 跳过后续的非SUM逻辑 } // 非SUM类型走原有遍历$9的逻辑 for(let a = 0; a < filters[i].$9.length;a++){ if(!transposeArr[a]) transposeArr[a] = []; transposeArr[a][i] = "other results"; } }
效果说明
最终生成的transposeArr结构符合你要求的格式,每一行对应一条数据,每一列对应filters数组的一个元素,SUM类型的列所有行值都是Success,其他列值为other results。
内容的提问来源于stack exchange,提问作者Farid Arshad
相关产品推荐
相关产品推荐

