使用for-of循环计算数组和与平均值的代码问题求助及优化咨询
问题分析与解决方案
首先咱们来拆解下你代码里的几个核心问题:
- 你在
for-of循环里用了let sum of elmt,这直接把之前用来存总和的sum变量覆盖了——每次循环时sum都会被赋值为当前数组元素,完全没法完成累加操作。 - 循环里还用到了
elmt[i],但你根本没在循环里对i做任何赋值,这个i是未定义的,根本取不到正确的数组元素。 - 数组初始化的写法太繁琐啦,完全可以用数组字面量一步到位。
修正后的for-of循环代码
先给你一个能正常运行的for-of版本:
// 用数组字面量简化初始化,更简洁 const elmt = [0, 1, 2, 3, 4, 7, 8, 9, 10, 11]; let sum = 0; // for-of循环用新变量接收当前元素,避免覆盖总和变量 for (const num of elmt) { sum += num; // 数组里都是数字,不用额外parseInt转换 } const avg = sum / elmt.length; // 建议用DOM操作指定元素,代替document.write(后者可能覆盖页面内容) document.getElementById("demo").textContent = `The sum of all the elements is: ${sum} The average is: ${avg}`;
更简便的实现方法
如果想要更紧凑的写法,推荐用数组的reduce方法来计算总和,一行就能搞定求和:
const elmt = [0, 1, 2, 3, 4, 7, 8, 9, 10, 11]; const sum = elmt.reduce((total, currentNum) => total + currentNum, 0); const avg = sum / elmt.length; document.getElementById("demo").textContent = `The sum of all the elements is: ${sum} The average is: ${avg}`;
reduce会遍历数组,每次把当前元素加到累加器total里,最后直接返回总和,非常适合这种求和场景。
另外提个小建议:尽量别用document.write,如果在页面加载完成后调用它,会直接覆盖整个页面内容;操作指定DOM元素的textContent或innerHTML会更安全规范。
内容的提问来源于stack exchange,提问作者user10727653
相关产品推荐
相关产品推荐

