对象在求和时返回NaN

Object returning NaN when sum values

本文关键字:返回 NaN 求和 对象      更新时间:2023-09-26

我承认我在JavaScript和JSON方面很弱。我花了很多时间试图弄清楚为什么数字从我的对象返回NaN时,他们加在一起。考虑到这一点,下面是我的JSON,存储到一个变量:

var data = [
    {
        "acc_ext_id": null,
        "cat_code": 10002,
        "cat_ds": "REVENUE",
        "category_id": null,
        "chart_id": null,
        "created_at": null,
        "dept_id": null,
        "feb": null,
        "id": null,
        "jan": 30,
        "note": null,
        "total_cost": null,
        "updated_at": null,
        "year_id": null
    },
    {
        "acc_ext_id": "41260-02600",
        "cat_code": 10002,
        "cat_ds": "REVENUE",
        "category_id": 2,
        "chart_id": 2373,
        "created_at": "2013-01-15 16:43:52.169213",
        "dept_id": 86,
        "feb": 45,
        "id": 3,
        "jan": 60,
        "note": "Two",
        "total_cost": 105,
        "updated_at": "2013-01-15 16:43:52.169213",
        "year_id": 1
    }
]

然后尝试遍历对象并将值求和:

var jan;
for (var i=0;i<data.length;i++){ 
    if(data[i].jan != null){    
        jan += parseFloat(data[i].jan);
        console.log(jan);
    }
}

在控制台中打印出的是NaN。我试图解析这个数字,但没有得到任何结果。我的物品有问题吗?下面是一个jsFiddle来说明:http://jsfiddle.net/5E2pm/3/

var jan = 0; //this should solve it
for (var i=0;i<data.length;i++){ 
    if(data[i].jan != null){    
        jan += parseFloat(data[i].jan);
        console.log(jan);
    }
}

试试这个应该可以解决:)

DON在下面的注释中引用的解释:

var 1月;这将声明变量为未定义,所以当您尝试用undefined添加值你会得到NaN,所以这里的答案是var jan = 0将工作- DON

2021

这是一个很好的使用减速器

const jan = data.reduce(function(total, current) {
 return total + current.jan;
}, 0); // starting value
老回答

我喜欢这个方法。当jan不存在时,它基本上在第一次迭代时将值设置为0。

jan = (jan || 0) + parseFloat(data[i].jan);

您需要先初始化jan

var jan = 0; 

示例如下- link