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

JavaScript Reduce函数返回NaN:计算笔记本总收益异常求助

解决reduce计算笔记本总收益返回NaN的问题

你的问题出在部分日期对应的cur值是数字0,此时cur?.laptop?.totalrev会返回undefined,而数字与undefined相加会得到NaN,最终导致整个reduce结果异常。

原问题代码

对象结构:

const obj = {
"2024-02-08": {
    "mobile": {
        "total": 2,
        "totalrev": 36
    },
    "laptop": {
        "total": 3,
        "totalrev": 535
    }
},
"2024-02-09": 0,
"2024-02-10": 0,
"2024-02-11": 0,
"2024-02-12": {
    "mobile": {
        "total": 5,
        "totalrev": 0
    },
    "laptop": {
        "total": 2,
        "totalrev": 0
    }
},
"2024-02-13": 0,
"2024-02-14": 0,
"2024-02-15": 0,
"2024-02-16": 0
}

出错的reduce代码:

const totalRevFromLaptop = Object.values(obj).reduce( (acc, cur) => acc + cur?.laptop?.totalrev, 0 );

修复方案

使用空值合并运算符??,当cur?.laptop?.totalrev为undefined时,自动替换为0,避免数字与undefined相加:

const totalRevFromLaptop = Object.values(obj).reduce( (acc, cur) => acc + (cur?.laptop?.totalrev ?? 0), 0 );

或者也可以先判断当前值是否为对象,再进行累加,逻辑更清晰:

const totalRevFromLaptop = Object.values(obj).reduce( (acc, cur) => {
  // 仅当cur是对象且不为null时,才尝试获取laptop的收益
  if (typeof cur === 'object' && cur !== null) {
    return acc + (cur.laptop?.totalrev ?? 0);
  }
  // 非对象类型直接返回累加值
  return acc;
}, 0 );

两种方案都能正确计算出笔记本设备的总收益,结果为535(2024-02-08的535加上2024-02-12的0)。

内容的提问来源于stack exchange,提问作者Tick Twitch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:57:24