JavaScript箭头函数计算学生平均分出错,输出异常值如何解决
问题根因
你的代码异常的核心原因是 prompt 函数的返回值为字符串类型,直接在reduce中执行加法操作时会触发字符串拼接逻辑,而非数值求和。你看到的242628302.6本质是输入的5个分数字符串拼接后,被隐式转换为数值再除以数组长度的结果。
修复方案
有两种常见的修复思路,可根据场景选择:
方案1:输入时直接转换为数值(推荐)
存入数组阶段就完成类型转换,也可以同步增加输入合法性校验,避免后续逻辑异常:
const marks = []; const size = 5; // 数组最大长度 for (let i = 0; i < size; i++) { // 用parseFloat将输入的字符串转为浮点数 const input = parseFloat(prompt('Enter Element ' + (i + 1))); // 校验输入合法性,非数字要求重新输入 if (isNaN(input)) { alert('请输入合法的数字分数'); i--; continue; } marks[i] = input; } const average = marks => marks.reduce((prev, curr) => prev + curr, 0) / marks.length; const result = average(marks); console.log(result);
方案2:累加时做类型转换
不需要修改输入逻辑,仅修改求和阶段的代码即可:
const marks = []; var size = 5; //Maximum Array size for (var i = 0; i < size; i++) { //Taking Input from user marks[i] = prompt('Enter Element ' + (i + 1)); } // 累加时把curr转为数值类型 const average = marks => marks.reduce((prev, curr) => prev + Number(curr), 0) / marks.length; const result = average(marks); console.log(result);
内容的提问来源于stack exchange,提问作者user16659888
相关产品推荐
相关产品推荐

