对值求和时返回 NaN 的对象

IT技术 javascript
2021-02-24 21:34: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/

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 jan; 这会将变量声明为未定义,因此当您尝试添加未定义的值时,您将获得 NaN,因此此处使用 var jan = 0 的答案将起作用 – DON

正准备将其添加到我的答案中,但您的评论就足够了:)
2021-04-16 21:34:26
var jan;,这将声明变量 as undefined,因此当您尝试添加值时,undefined您将获得 as NaN,因此这里的答案var jan = 0将起作用
2021-04-22 21:34:26

2021年

这是减速机的一个很好的用途

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

旧答案

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

jan = (jan || 0) + parseFloat(data[i].jan);
美丽的解决方案
2021-04-20 21:34:26
如果您事先不知道密钥,那么确保初始化的非常酷的方法。谢谢!
2021-05-07 21:34:26

你需要初始化一月第一

var jan = 0; 

这是示例 -链接