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

数组对象grade属性求和出现NaN问题排查求助

数组对象grade属性求和出现NaN的原因及解决方法

你的两段代码问题分析

第一段代码的问题

  1. 未设置reduce初始值:reduce没传第二个参数时,第一次迭代的previousValue是数组第一个对象,后续迭代返回的也是对象。一旦遇到没有grade的对象,currentValue.grade就是undefined,数字加undefined直接变成NaN,后续所有计算都会继承这个NaN。
  2. 累加逻辑错误:每次返回包含grade的对象而非纯数值,导致累加过程变成对象属性的无效运算。

第二段代码的问题

  1. 属性名写错:你用了item.total,但数组里的对象只有grade属性,item.total始终是undefined,0加undefined直接得到NaN。
  2. 未处理无grade的情况:就算改成item.grade,遇到没有该属性的对象时,依然会出现undefined参与运算的问题,结果还是NaN。

正确的实现代码

const arr=[
  {"name":"Harvey","grade":3},
  {"name":"Pamela"},
  {"name":"Scott","grade":4},
  {"name":"Joshua","grade":5},
  {"name":"Rachel"},
  {"name":"Harvey","grade":3},
]

// 标准写法:累加数值,处理无grade的情况
let classTotal = arr.reduce((accum, item) => {
  // 严谨判断:只有当grade是数字时才累加,否则加0
  return accum + (typeof item.grade === 'number' ? item.grade : 0);
}, 0); // 必须设置初始值0,确保累加从数字开始

console.log(classTotal); // 输出18

关键注意点

  • 一定要设置reduce初始值:第二个参数0保证累加器一开始是数字类型,避免对象参与运算的问题。
  • 处理无grade的对象:用typeof item.grade === 'number'判断可以覆盖grade为0、null等特殊情况,比item.grade || 0更严谨(如果你的场景中grade可能为0,后者会错误地把0当成无效值)。

内容的提问来源于stack exchange,提问作者Somdotta Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:31:16