Невозможно преобразовать строку в число с помощью метода parseFloat - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь создать датавиз о писателях. Я создал файл 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 голосов
/ 05 марта 2019

Как и указали в своем комментарии altocumulus, вы используете старый csv api с новой версией d3. В старом API вы могли предоставить функцию обратного вызова в качестве последнего аргумента. Так как новый API использует fetch, он теперь возвращает обещание.

Для версии 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, но я думаю, что он должен работать.

...