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

尝试汇总各联系人月度数值时出现NaN问题,求排查

问题描述

我有一个包含offices(联系人)及各月份数值的对象:

let data = {
    offices : [], 
    January : [],
    February : [],
    March : [],
    April : [],
    May : [],
    June : [],
    July : [],
    August : [],
    September : [],
    October : [],
    November : [],
    December : [],
    Total: []
};        

我想要按月份汇总所有数值并展示在表格中,编写了如下循环代码:

for (let i = 0; i < result.length; i++) {
    let summ = 0;
    data.offices.push(result[i].office);

    data.January.push(result[i].months[0]);
    summ += data.January.amount;
    data.JanuaryTotal += result[i].months[0];
                
    data.Total.push(summ);
}  

但运行后出现了NaN值,无法实现需求,请问我哪里出错了?

错误分析与修正

出现NaN的核心原因是几个逻辑错误:

  • data.January.amount是无效访问:data.January是数组,根本没有amount属性,直接取值会得到undefined,和数值相加就会变成NaN。
  • data.JanuaryTotal未初始化:你的初始data对象里根本没定义这个属性,默认是undefined,直接累加数值必然得到NaN。
  • summ的计算逻辑完全错误:每次循环把summ初始化为0,再加一个不存在的amount值,结果只能是NaN,最后存到Total里自然也是NaN。

修正后的代码

假设result中每个元素的months数组对应12个月的数值,我们可以这样改写代码:

// 先初始化各月份的汇总变量,避免未定义导致NaN
const monthTotals = {
    January: 0, February: 0, March: 0,
    April: 0, May: 0, June: 0,
    July: 0, August: 0, September: 0,
    October: 0, November: 0, December: 0
};

const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

for (let i = 0; i < result.length; i++) {
    const currentItem = result[i];
    data.offices.push(currentItem.office);
    
    let currentTotal = 0; // 当前联系人的总数值
    
    // 批量处理每个月份的数据
    for (let j = 0; j < monthNames.length; j++) {
        const month = monthNames[j];
        // 处理可能的空值,把undefined/null转为0
        const monthValue = currentItem.months[j] ?? 0;
        
        data[month].push(monthValue);
        monthTotals[month] += monthValue;
        currentTotal += monthValue;
    }
    
    // 存入当前联系人的总数值
    data.Total.push(currentTotal);
}

// 把各月份的汇总结果挂载到data上,方便后续使用
data.monthlyTotals = monthTotals;

关键优化点

  1. 提前初始化月份汇总变量,避免未定义属性的累加操作
  2. 对月份数值做空值兜底,防止undefined或null参与计算导致NaN
  3. 用循环批量处理12个月,减少重复代码
  4. 单个联系人的总数值直接累加其所有月份数据,逻辑更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:41:58