无法使用parseFloat方法将字符串转换为数字

时间:2019-03-05 14:52:42

标签: d3.js parsefloat

我正在尝试创建有关作家的dataviz。我创建了csv文件,然后由d3.csv函数处理。我还定义了另一个函数来处理一些值,而不是字符串(特别是出版年份,页数和价格)。但是,当我将页面加载到浏览器中时,控制台仍将这些值作为字符串返回。您能帮助我理解为什么以及如何解决它吗?谢谢!

      <script type="text/javascript" src="d3.js">
  
      var w = 500;
      var h = 520;
      var padding = 30;

      var svg = d3.select("body").append("svg")
                .attr("width", w)
                .attr("height", h);

      var rowConverter = function(d) {
        return {
          author: d.author,
          title: d.title,
          publisher: d.publisher,
          year: parseFloat(d.year),
          pages: parseFloat(d.pages),
          price: parseFloat(d.price)
        };
      }

          d3.csv("libri_nuovi.csv", rowConverter, function(data) {
            console.log(data);
          });


      </script>

</body>

1 个答案:

答案 0 :(得分:-2)

就像altocumulus在他的评论中指出的那样,您正在使用旧的csv api和新的d3版本。在旧的API中,您可以提供一个回调函数作为最后一个参数。由于new API使用访存,因此它现在返回一个Promise。

对于5.8.0版,您可以像下面这样重写函数:

    d3.csv(",", "libri_nuovi.csv", function(d) {
      return {
        author: d.author,
        title: d.title,
        publisher: d.publisher,
        year: +d.year, // convert "year" column to number
        pages: +d.pages,
        price: +d.price,
     };
   }).then(function(data) {
     console.log(data);
   });

这是未经测试的代码,因为您没有发布初始的json,但我认为它应该可以工作。