当键/值是动态的时,将JSON值转换为数字

时间:2016-11-14 17:10:08

标签: javascript json d3.js d3.js-v4

我正在使用d3.json来解码其中键/值未知的数据集。我需要将数字值转换为数字,然后单独留下数字。

我的JSON看起来像这样:

[{"file":"morning","row_total":"1095935","attr1":"79","attr2":""},
{"file":"noon","row_total":"221167","attr1":"174","attr2":"114"},
{"file":"night","row_total":"1317102","attr1":"253","attr2":"114"}]

使用d3.json从PHP文件中读取。对于每个可以(不抛出NaN)的值,我需要转换为数字(d3使用+符号):

d3.json("getData.php", function(error, data) {
    if (error) throw error;

    data.forEach(function(d) {
        if(!isNaN(d.i = +d.i)
          d.i = +d.i
          )})

显然我的测试/循环逻辑存在问题。我真的很感激这里的一些指导。

谢谢!

1 个答案:

答案 0 :(得分:1)

isNaN将处理数字字符串 - 赋值运算符可能会抛弃您的代码 - 您可以这样做:

if(!isNaN(d.i)) {

您在)语句中错过了ifisNaN次{。}}。

isNaN("1") //false
isNaN("x") //true

假设我应该阅读更多内容。你需要2个循环 - 一个循环你的数组,另一个循环来测试对象的每个键/ val:

for (var i = 0; i < data.length; i++) {
    for (var key in data[i]) {
        if (!isNaN(data[i][key])) {
            data[i][key] = +data[i][key];
        }
    }
}