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

Cannot convert string into number with parseFloat method

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

      <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>

就像高积云在他的评论中指出的那样,您使用的是旧 csv api 和新版本的 d3。在旧的 API 中,您可以提供一个回调函数作为最后一个参数。由于 new API 使用 fetch,它 returns 现在是一个承诺。

对于版本 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);
   });

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