6

我承认我在 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/

4

3 回答 3

14
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 在以下评论中引用的解释:

变种扬;这会将变量声明为未定义,因此当您尝试使用未定义添加值时,您将得到 NaN,因此此处使用 var jan = 0 的答案将起作用 – DON

于 2013-01-20T06:18:43.167 回答
7

2021

这是减速机的好用处

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

旧答案

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

jan = (jan || 0) + parseFloat(data[i].jan);
于 2015-10-22T13:25:30.860 回答
1

你需要先初始化jan

var jan = 0; 

这是示例 -链接

于 2013-01-20T06:24:53.620 回答