d3将csv文件导入到阵列

时间:2018-10-04 04:02:23

标签: d3.js

我正在尝试使用d3.csv()方法导入.csv文件。这是我的代码:

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

我想我会得到一个包含对象的数组,每个对象代表我的.csv文件的一行(其中有50个)。我实际上得到的是一系列独立的对象。也就是说,该函数已将50个对象记录到我的控制台中,而不是一个包含50个对象的数组。我会误解这种方法吗?如果是这样,我如何获得这样的阵列?

1 个答案:

答案 0 :(得分:0)

在d3 v5 中,用于获取数据的API发生了很大变化,由于基础工作已从使用XMLHttpRequest切换为Fetch API,这变得很有必要。在D3到v4的早期版本中,您的代码将按照您期望的那样打印单个结果数组。 d3.csv()的新API如下所示:

  

# d3。 csv 输入 [, init ] [,]) <>

进一步,文档提供了explanation供您观察:

  

如果仅指定 init row 中的一个,则将其解释为 row 转换函数,否则为初始化对象。

在您的代码中,d3.csv()的第二个参数是一个函数,因此被解释为行转换函数。由于行转换功能是针对输入文件中的每一行执行的,因此您会看到每个对象都是单独打印的,而不是一次打印整个数组。

由于d3.csv()返回了Promise,因此正确用法如下:

d3.csv("data.csv")
  .then(function(data) {
    console.log(data);
  });

这里data是指整个对象数组。