2

这是来自d3csv API 文档:

d3.csv("path/to/file.csv")
    .row(function(d) { return {key: d.key, value: +d.value}; })
    .get(function(error, rows) { console.log(rows); });

我怎样才能将其传递rows给一段var data时间,而不仅仅是console.log它。我只想要来自 csv 的数据,但我不熟悉 JavaScript。

4

1 回答 1

17

这里的答案仅适用于 d3 v4 及以下版本。从 d3 v5 开始,这种方法发生了变化。有关最新解决方案,请参阅此答案

请记住,不可能d3.csv()返回任何数据,因为必须首先加载数据。这就是我们使用回调函数的原因,一旦加载数据就会调用回调函数(您可以通过研究“异步 javascript”来了解更多信息)。

您仍然可以将加载的数据分配给变量,但您必须牢记隐含的异步函数。

// This will be assigned to rows, once the data is ready.
var myData = null;

d3.csv("path/to/file.csv")
    .row(function(d) { return {key: d.key, value: +d.value}; })
    .get(function(error, rows) {
      console.log(rows);
      myData = rows;// Now you can assign it
      myDataIsReady()// Now you can draw it
    });

// IMPORTANT NOTE! Here myData is still null
console.log(myData);// will trace null

function myDataIsReady() {
  console.log(myData);// will trace the data that was loaded
  // Here you can draw your visualization
}

关键是在加载和解析 CSV 之前,您无法绘制任何内容。所以无论如何,您的绘图代码必须存在于从d3.csv回调中调用的某个函数中。

可以构造您的代码,以便您永远不需要分配rows给变量(您只需传递rows给绘制数据的函数)。

于 2013-06-14T20:46:10.073 回答