JavaScript如何累加数组各元素的数位和得到正确总和?
问题修复方案
你的代码存在4个核心逻辑错误,修正后即可得到正确结果50。
核心错误点
- 变量定义位置错误:统计总和的
sum变量写在了遍历原数组的for循环内部,每处理一个元素就会被重置为0,无法完成全量累加 - 变量类型误用:
digsum是存储单个元素数位和的数字值,不是数组,你用digsum[j]的方式访问索引属性得到的是undefined,转成数字后就是NaN,累加结果必然是NaN - 原始数据被修改:计算数位和的while循环直接改写了原数组的元素值,多位数计算完成后会被置为0,后续遍历拿不到原始输入值
- 输出位置错误:打印逻辑放在循环内部,会每处理一个元素就输出一次结果,不符合最终输出总累加值的需求
可直接运行的正确代码
var arrChars = [4, 2, 14, 9, 0, 8, 2, 4, 130, 65, 0, 1]; // 总和变量定义在循环外,初始化为0 var totalSum = 0; for (var i = 0; i < arrChars.length; i++) { // 拷贝当前元素值做计算,不修改原数组 var current = arrChars[i]; var digitSum = 0; // 用do-while兼容值为0的情况,保证0的数位和计算为0 do { digitSum += current % 10; current = Math.floor(current / 10); } while (current > 0) // 当前元素数位和算完直接累加到总和 totalSum += digitSum; } // 所有元素处理完成后再打印结果 console.log(totalSum);
运行后控制台会直接输出正确结果50。
逻辑说明:遍历数组时不直接修改原元素,临时拷贝值计算单个元素的数位和,每算完一个就把结果加到外层的总和变量里,所有元素遍历完成后统一输出,不需要额外嵌套循环遍历数位和变量。
内容的提问来源于stack exchange,提问作者cherron
相关产品推荐
相关产品推荐

