JavaScript循环多条件逻辑问题:求addingAllTheWeirdStuff函数修复方案
问题分析
- 遍历array1的
for循环缺少闭合大括号,导致判断array2是否存在大于20元素的逻辑被错误嵌套在array1的遍历循环内,执行逻辑完全混乱 - 检测到array2存在大于20的元素后,给array1元素加1的逻辑里,
return语句写在了遍历array1的循环内部,导致只给第一个元素加1就直接返回结果,剩余元素没有完成加1操作 - 逻辑冗余:不需要每次检测到大于20的元素就遍历array1加1,可以先单独计算出
是否存在大于20的元素的标记,最后统一处理即可,减少嵌套循环提升性能
修正后代码
function addingAllTheWeirdStuff(array1, array2){ let sumOdd = 0; let sumEven = 0; let hasOver20 = false; // 标记array2是否存在大于20的元素 // 一次遍历array2完成所有统计逻辑 for (let i = 0; i < array2.length; i++) { const num = array2[i]; if (num % 2 !== 0) { sumOdd += num; } else { sumEven += num; } if (num > 20) { hasOver20 = true; } } // 遍历array1完成所有赋值逻辑 for (let i =0; i < array1.length; i++) { if (array1[i] < 10) { array1[i] += sumOdd; } else if (array1[i] > 10) { array1[i] += sumEven; } // 满足附加条件时额外加1 if (hasOver20) { array1[i] += 1; } } return array1; }
修正说明
- 一次遍历array2同时完成奇数和、偶数和、是否存在大于20元素三个统计项,减少不必要的多次循环
- 补充了原代码遗漏的array1遍历循环的闭合大括号,避免逻辑嵌套错误
- 移除了所有写在循环内部的提前return语句,保证所有元素都能完成预设处理
- 把附加规则的处理和基础规则的处理合并到同一次array1遍历中,逻辑更清晰执行效率更高
内容的提问来源于stack exchange,提问作者Matthew Schwer
相关产品推荐
相关产品推荐

