JS数组计算求助:如何输出平均值、总和与乘积?代码报NaN
JavaScript数组计算总和、平均值、乘积时NaN问题解决
你的代码出现NaN的核心原因是类型错误和计算逻辑错误,以下是具体问题分析和修正方案:
问题点梳理
- 变量初始化错误:sum、average、product初始化为空字符串
"",字符串与数值拼接会保留字符串类型,后续数值运算直接返回NaN;乘积的初始值应为1(乘法的单位元,初始为0结果永远是0)。 - 输入未转数值:
prompt()返回的是字符串,直接存入数组后,后续运算都是字符串拼接而非数值计算。 - 计算逻辑错误:
- 平均值需基于总和除以数量,而非字符串拼接后做除法
- 乘积的计算逻辑完全错误,你用字符串拼接后乘以数组,不符合乘法运算规则
- DOM输出覆盖:三次调用
innerHTML会依次覆盖前一次结果,无法同时展示所有计算值
修正后的代码
let myIntegers = []; let input = ""; // 初始化正确的数值类型变量 let sum = 0; let product = 1; let average = 0; while(input !== "xxx"){ input = prompt("Add numbers, end using xxx."); if(input !== "xxx"){ // 将输入转为整数,第二个参数10表示十进制 const num = parseInt(input, 10); // 过滤非有效数字输入 if(!isNaN(num)){ myIntegers.push(num); } else { alert("请输入有效的整数或输入xxx结束"); } } } console.log(myIntegers); // 计算总和 for(let y = 0; y < myIntegers.length; y++){ sum += myIntegers[y]; } // 计算乘积(处理空数组的边界情况) if(myIntegers.length > 0){ for(let z = 0; z < myIntegers.length; z++){ product *= myIntegers[z]; } } else { product = "无有效数字,无法计算乘积"; } // 计算平均值(处理空数组避免除以0) if(myIntegers.length > 0){ average = sum / myIntegers.length; } else { average = "无有效数字,无法计算平均值"; } // 整合所有结果一次性输出,避免覆盖 document.getElementById("output").innerHTML = ` 输入的整数数组:${myIntegers.join(', ')}<br> 总和:${sum}<br> 平均值:${average}<br> 乘积:${product} `;
关键修正说明
- 变量初始化为数值类型,符合加法、乘法的运算逻辑
- 把
prompt输入转为整数,同时过滤无效输入,避免非数字值进入数组 - 先计算总和,再基于总和推导平均值,乘积使用乘法赋值
*=完成累积计算 - 增加空数组的边界处理,避免出现除以0或无意义的乘积结果
- 使用模板字符串整合所有结果,一次性输出到DOM节点,保留所有计算值
内容的提问来源于stack exchange,提问作者uncanny-vegan-taco
相关产品推荐
相关产品推荐

