d3 将 csv 文件导入数组

M-N*_*M-N 3 d3.js

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

d3.csv("data.csv", function(data) {
  console.log(data);
})
Run Code Online (Sandbox Code Playgroud)

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

alt*_*lus 5

在 d3 v5中,用于获取数据的 API 发生了很大的变化,这是必要的,因为底层工作已经从使用 API 切换XMLHttpRequest到 Fetch API。在 D3 到 v4 的早期版本中,您的代码的行为将与您期望的打印单个结果数组一样。d3.csv()然而,新的 API看起来像这样:

# d3. csv (输入[,初始化][,]) <>

下面的文档为您的观察提供了解释

如果仅指定initrow之一,则如果它是函数,则将其解释为转换函数,否则解释为 init 对象。

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

由于d3.csv()返回一个 Promise,正确的用法将是这样的:

d3.csv("data.csv")
  .then(function(data) {
    console.log(data);
  });
Run Code Online (Sandbox Code Playgroud)

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