JS如何计算数组每个元素及后续元素的和并转换为结果数组
后缀和数组转换解决方案
现有代码错误点
Array.forEach()无返回值,执行后返回undefined,无法通过赋值得到结果数组- 代码中调用的
result变量未定义,运行时报错 - 内置
reduce逻辑不符合「当前元素+后续所有元素求和」的计算规则
修正后实现
易读版本(时间复杂度O(n²),适合小数组场景)
用Array.map()替代forEach,遍历每一位时截取当前下标到数组末尾的元素求和,最终直接返回组装好的数组:
function sumNumbers(numbersList) { const suffixSum = numbersList.map((_, index) => { return numbersList.slice(index).reduce((acc, cur) => acc + cur, 0) }) // 按期望输出格式外层包裹一层数组返回 return [suffixSum] } // 测试 console.log(sumNumbers([4, 5, 1, 2, 3, -2])) // 输出:[[13,9,4,3,1,-2]],完全匹配要求的[(13, 9, 4, 3, 1, -2)]格式
高性能版本(时间复杂度O(n),适合大数组场景)
倒序遍历累加,避免重复计算后缀和,性能更高:
function sumNumbers(numbersList) { const res = [] let currentSum = 0 for (let i = numbersList.length - 1; i >= 0; i--) { currentSum += numbersList[i] res.unshift(currentSum) } return [res] }
内容的提问来源于stack exchange,提问作者user248462
相关产品推荐
相关产品推荐

