使用JavaScript reduce函数计算数组coin属性总和时遇结果未定义错误的求助
问题排查与修复方案
首先,咱们直接说核心问题:你的run函数没有返回计算好的总和值!这就是测试用例报错Error: expected undefined to equal 8600的原因——函数执行完后默认返回undefined,而不是你计算出来的totalcoin。
排查思路拆解
我给你梳理几个可以快速定位这类问题的步骤:
- 第一步:检查函数返回值:这是最容易忽略但高频出现的问题。当你写了计算逻辑但没把结果return出去,调用方拿到的就是undefined,自然和预期数值不匹配。
- 第二步:验证reduce的初始值:你这里给reduce传了初始值
0,这部分是正确的——如果没传初始值,当数组为空时会报错,而且如果第一个元素结构不符合预期也会出问题,你这步做对了。 - 第三步:检查reduce回调逻辑:你在回调里累加
total + course.coin的逻辑是正确的,每次迭代都在更新总和,这部分没问题。 - 第四步:清理冗余代码:你定义的
i变量完全没用,reduce本身会自动遍历数组的每一项,不需要额外的计数器,删掉它代码更简洁。
修复后的代码
只需要在函数里把计算好的结果返回出去就行,甚至可以简化写法:
基础修复版
function run(courses) { return courses.reduce(function(total, course) { return total + course.coin; }, 0); }
简洁箭头函数版
如果你的环境支持ES6+,可以写成更简洁的形式:
const run = (courses) => courses.reduce((total, course) => total + course.coin, 0);
现在你再测试这两个输入用例:
- 输入1的总和会正确返回
8600 - 输入2的总和会正确返回
3600
内容的提问来源于stack exchange,提问作者nguyencuc2186
相关产品推荐
相关产品推荐

