如何计算数组元素总和?可用积分reduce求和结果异常问题
问题分析与解决方案
问题根源
你的代码存在两个关键错误:
- 错误地将原本就是数组的
credits用[credits]包裹,形成了二维数组,reduce实际遍历的是外层数组的单个元素(即原credits数组),导致累加逻辑完全错误。 reduce回调函数中没有提取每个对象的available属性值,反而直接累加整个对象,同时参数命名混淆(credits作为累加器,和原数组名冲突),进一步导致计算结果异常。
修正后的代码
const totalAvailableCredits = credits.reduce((total, item) => { return total + item.available; }, 0);
代码说明
- 直接使用原数组
credits调用reduce,无需额外包裹。 - 回调函数第一个参数
total是累加器,用于存储当前的总和;第二个参数item是数组中当前遍历的对象元素。 - 每次累加时提取
item.available(即每个对象的可用积分值),与total相加。 - 初始值设为
0,确保数组为空时返回正确的0值。
验证结果
针对你提供的数组:
const credits = [ {creditId: 71, expiresOn: '2023-09-26T14:33:58Z', available: 10, createdOn: '2022-09-26T14:33:58Z'}, {creditId: 265, expiresOn: '2023-10-26T18:05:54Z', available: 2, createdOn: '2022-10-26T18:05:54Z'} ];
修正后的代码会正确计算出总和:10 + 2 = 12。
内容的提问来源于stack exchange,提问作者varvv
相关产品推荐
相关产品推荐

