Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3.js:通过D3.csv加载平面一维数组,结果为;TypeError:groupData未定义";/使用D3.js加载多个CSV文件_Javascript_Asynchronous_D3.js - Fatal编程技术网

Javascript D3.js:通过D3.csv加载平面一维数组,结果为;TypeError:groupData未定义";/使用D3.js加载多个CSV文件

Javascript D3.js:通过D3.csv加载平面一维数组,结果为;TypeError:groupData未定义";/使用D3.js加载多个CSV文件,javascript,asynchronous,d3.js,Javascript,Asynchronous,D3.js,我使用函数exampleData()生成一个平面的一维数组,该数组用于使用d3.js(vesion 3.5.5)生成SVG元素。那很好用 但是当我使用下面提到的函数load()[like dataset=load();]时,这会导致错误TypeError:groupData未定义d3.v3.js:1688:31 有人能帮忙吗?文件data.csv有一个名为x的列标题和另外20行,每行有一个整数。在webbrowser的控制台上进行查询时,数组似乎没有问题 最好的,弗兰克 函数exampleDa

我使用函数exampleData()生成一个平面的一维数组,该数组用于使用d3.js(vesion 3.5.5)生成SVG元素。那很好用

但是当我使用下面提到的函数load()[like dataset=load();]时,这会导致错误TypeError:groupData未定义d3.v3.js:1688:31

有人能帮忙吗?文件data.csv有一个名为x的列标题和另外20行,每行有一个整数。在webbrowser的控制台上进行查询时,数组似乎没有问题

最好的,弗兰克

函数exampleData(){
返回[11,12,15,20,18,17,16,18,23,25,5,10,13,19,21,25,22,18,15,13];

}
由于您提供的代码不会引发任何与您描述的错误类似的错误,我猜错误发生在您尝试使用加载的数据集时,因为使用
dataset=load()
dataset
将是
未定义的

代码的问题是,
load()
没有返回语句

实际上,
load()
甚至不能返回任何内容,因为
d3.csv()
加载数据异步
d3.csv()
不返回任何内容。它启动对给定的
csv
的请求,当该请求完成时,它调用回调函数

在代码中调用
load()
时,调用后的下一行可能会在加载数据之前执行。如果您这样尝试:

function load() {
  d3.csv("data.csv", function(data) {
    dataset2 = data.map(function(d) { 
      return [ +d["x"] ];
    });
    dataset2= d3.merge(dataset2);
    console.log(dataset2);
  });
}

load();
console.log("afterLoad");
将首先记录
后加载
。稍后,加载数据时,将记录数据集

因此,您必须在
回调中处理数据。也许你应该有另一个功能来绘制图表。必须从回调函数调用此函数,如下所示:

function load() {
  d3.csv("data.csv", function(data) {
    dataset2 = data.map(function(d) { 
      return [ +d["x"] ];
    });
    //console.log(dataset2);
    dataset2= d3.merge(dataset2);
    //console.log(data);
    //call the function that needs the data
    drawMyChart(dataset2);
  });
}

因为您将数据集命名为
dataset2
,所以我猜有不止一个数据集。我解释了如何在中加载多个csv文件。这可能会帮助您理解异步编程的概念。

您的示例中没有
groupData
,您还没有指出哪一行抛出了错误。没有这些,你就不可能回答你的问题。谢谢你的回答。我听说了
d3.csv()
的异步行为。您的示例是理解这种“特殊”行为的一个很好的用例。我想实现的是,每当鼠标单击ID为“click1”、“click2”等的按钮时,加载不同的CSV文件。我想这样解决:
d3。选择(#click1”)。在(“单击”,函数(){//dataset的新值=加载(); 	// ..... 	});但是你用函数
load()
和函数中的图表绘制的答案正是我需要的。如果我将函数与输入值一起使用,比如
load(filename){d3.csv(filename,.}
,那么我应该有我需要的解决方案。