JavaScript中reduce方法sum函数未将数组元素累加为单个值
问题根因
数组newton存储的所有元素都是字符串类型,并非数值类型。JavaScript中+运算符两侧只要存在字符串类型值,就会执行字符串拼接逻辑,而非数值加法。同时调用reduce时未传入初始值,首次执行回调时累加器total直接取数组第一个字符串元素"1",后续每一步运算都是字符串拼接,最终得到所有元素拼接后的字符串,无法得到数值求和结果。
核心错误点:
- 数组元素为带前导空格的字符串,未做数值类型转换
reduce未指定数值类型初始值,累加初始状态为字符串- 累加逻辑中未做类型处理,直接使用
+触发字符串拼接
修复方案
在reduce中传入数值类型初始值0,累加前对每个字符串元素去除首尾空格后转为数字,再执行加法运算:
let newton = ["1", " 2", " 3", " 4", " 5"]; let newton2 = newton.reduce(sum, 0); function sum(total, value) { return total + Number(value.trim()); } document.getElementById("demo").innerHTML = newton2;
对应HTML部分无需修改:
<p id="demo"></p>
修复后运行结果为数值15,符合预期累加效果。
也可以先批量将数组转为数字数组,再执行归约求和,逻辑更清晰:
let newton = ["1", " 2", " 3", " 4", " 5"]; const numberList = newton.map(item => Number(item.trim())); let newton2 = numberList.reduce((total, current) => total + current, 0); document.getElementById("demo").innerHTML = newton2;
内容的提问来源于stack exchange,提问作者user19361752
相关产品推荐
相关产品推荐

