【问题标题】:Turn NaN into a number [duplicate]将 NaN 变成数字 [重复]
【发布时间】:2018-10-06 05:59:26
【问题描述】:

我正在导入这样一个数据集:

Year,Spain,Rest
2017,"1,688","5,787"
2016,"1,787","5,505"
2015,"1,826","5,187"
2014,"1,822","4,861"

我需要将这些数字转换为数字以显示在 D3 图表中。我尝试使用这两个版本的代码来执行此操作,但我仍然得到 NaN 作为答案,所以我不知道如何解决这个问题:

d3.csv("stores.csv", function(d, i, columns) {
  for (i = 1, t = 0; i < columns.length; ++i) {
    t += d[columns[i]] = +d[columns[i]];
  }
  d.total = t;
  return d;
}, function(error, data) {
  if (error) throw error;
  console.log(data);
  var keys = data.columns.slice(1);

  data.forEach(function(d) {
    d.Year = parseDate(d.Year);
    d["Spain"]= +(d["Spain"]);
    d["Rest"] = +d["Rest"];
    d["total"] = +d["total"];
    // ...

我尝试以这种方式使用 parseInt() 而不是 +:

d["Spain"]= parseInt(d["Spain"]);

但还是不行。

希望有人可以帮助我。

【问题讨论】:

  • console.log(d["Spain"]) 的结果是什么?尝试扩展您的问题。不过有一件事:我认为您不想使用parseInt(string, radix),因为parseInt("4,861", 10) 返回4。也许你需要developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • console.log(d["Spain"]) 的结果是 NaN。
  • 好的,所以在forEach-function 之前出错了。尝试正确缩进并使用更好的变量名。这对调试很有帮助。当您使用它时,我建议您更改您的问题和代码布局,以便其他人更具可读性。另外,在 d.Year ... 行之前做一个console.log(d)
  • @epascarello 我认为这不是重复的。您可以取消标记它以便我发布解决方案吗?谢谢。

标签: javascript d3.js


【解决方案1】:

您需要在解析之前从值中删除,

d["Spain"]= Number(d["Spain"].replace(',', ''));

【讨论】:

  • 谢谢!关于您的解决方案,我唯一要提到的另一件事是它假设逗号分隔千位而不是小数。一点本地化知识在这里会有所帮助...
  • 取决于数据源,实际上可能意味着.
  • 是的,逗号分隔千位而不是小数。我试过这个解决方案,但它说:“Typerror: d.Spain.replace is not a function”。
  • @MichaelRo 这意味着您需要查看 D3 文档,了解如何获取数据。如果数据被正确检索并且只有解析问题,那么解决方案是正确的。
猜你喜欢
  • 2015-09-09
  • 2017-04-12
  • 1970-01-01
  • 2017-03-20
  • 2019-02-27
  • 2015-10-25
  • 1970-01-01
  • 2011-03-27
  • 2012-09-24
相关资源
最近更新 更多