You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用reduce对对象数组中thinking的sum求和报错,如何修复?

修复数组对象属性求和的Reduce错误

你的代码出错的核心原因是没有给reduce设置初始累加值,且累加逻辑错误:

  • 第一次迭代时,a是数组第一个元素(对象类型),b是第二个元素,计算后返回64 + 100 = 164(数值类型)
  • 第二次迭代时,a变成了164(数值),此时访问a['thinking'].sum会报错——因为数字没有thinking属性

正确的修复代码

const bests = [
  { thinking: { _id: '6347d5b4edc3227f056cbc0c', sum: 64, num: 1 }, listening: { _id: '6347d5b4edc3227f056cbc0d', sum: 129, num: 2 }, speaking: { _id: '6347d5b4edc3227f056cbc0e', sum: 0, num: 2 }, writing: { _id: '6347d5b4edc3227f056cbc0f', sum: 0, num: 0 }, speed: { _id: '6347d5b4edc3227f056cbc10', sum: 187, num: 2 }, overall: { _id: '6347d5b4edc3227f056cbc11', sum: 129, num: 2 } },
  { thinking: { _id: '6347e46665609042876fc4a6', sum: 100, num: 1 }, listening: { _id: '6347e46665609042876fc4a7', sum: 100, num: 1 }, speaking: { _id: '6347e46665609042876fc4a8', sum: 100, num: 1 }, writing: { _id: '6347e46665609042876fc4a9', sum: 0, num: 0 }, speed: { _id: '6347e46665609042876fc4aa', sum: 88, num: 1 }, overall: { _id: '6347e46665609042876fc4ab', sum: 100, num: 1 } },
  { thinking: { _id: '6347e54f65609042876fc4af', sum: 10, num: 10 }, listening: { _id: '6347e54f65609042876fc4b0', sum: 65, num: 1 }, speaking: { _id: '6347e54f65609042876fc4b1', sum: 0, num: 1 }, writing: { _id: '6347e54f65609042876fc4b2', sum: 0, num: 0 }, speed: { _id: '6347e54f65609042876fc4b3', sum: 95, num: 1 }, overall: { _id: '6347e54f65609042876fc4b4', sum: 65, num: 1 } }
]

// 修复后的代码:设置初始值0,每次累加当前元素的thinking.sum
const sum = bests.reduce((total, current) => total + current.thinking.sum, 0);
console.log('sum::', sum); // 输出 64+100+10 = 174

关键说明

  • 给reduce传入第二个参数0作为初始累加值,确保total从数字开始迭代
  • 每次迭代只需要把当前元素的thinking.sum加到total上,逻辑清晰且不会出现类型错误

内容的提问来源于stack exchange,提问作者Sara Ree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:55:35