Javascript将整数解析为NaN?

时间:2012-12-11 15:29:31

标签: javascript integer d3.js

我正在解析一些数据以显示在图表中,但是当我解析整数时,我一直得到NaN。我知道这通常意味着他们没有被正确解析,但我正在使用parseint而我认为这会解决问题。我正在解析Unixtime(第一个字段),然后解析其他三个字段(正确解析)。然而,每当我去展示Unix时它就失败了。我已经为x声明了scale.linear,虽然time.scale也失败了。

我正在使用的代码片段如下:

d3.tsv("<?php echo $field; ?>values.tsv", function(error, data) {
  color.domain(d3.keys(data[0]).filter(function(key) { return key !== "Unixtime"; }));
  data.forEach(function(d) {
    d.Unixtime = parseInt(d.Unixtime/1000);
  });
  var cities = color.domain().map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
        return {Unixtime: d.Unixtime, value: parseFloat(d[name]/1000)};
      })
    };
  });

我收到的错误消息位于Chrome调试器下方。

Error: Problem parsing d="MNaN,1.7527908403982337CNaN,1.7527908403982337,NaN,1.7527908403982337,NaN,1.751122428294669CNaN

数据如下:

1353168433      5557    6404    5510

1353175632      5478    6404    5510

1353182750      5432    6404    5510

2 个答案:

答案 0 :(得分:1)

问题在于这一行:

d.Unixtime = parseInt(d.Unixtime/1000);

当你除以1000时,你得到一个十进制数。请尝试parseFloat()

d.Unixtime = parseFloat(d.Unixtime/1000);

或者,转换为int后可以/1000

d.Unixtime = parseInt(d.Unixtime)/1000;

答案 1 :(得分:0)

事实证明,根据Alvaro的建议,console.log(d.Unixtime)打印未定义。有了这个,我回过头来注意到该字段的名称在某种程度上改变了时间,而不是unixtime。更改后,它可以工作。谢谢大家!

d3.tsv("<?php echo $field; ?>values.tsv", function(error, data) {
  color.domain(d3.keys(data[0]).filter(function(key) { return key !== "time"; }));
  data.forEach(function(d) {
    d.Unixtime = parseInt(d.time,10)/1000;
  });
  var cities = color.domain().map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
        return {time: d.time, value: parseFloat(d[name],10)/1000};
      })
    };
  });