Javascript 如何加载多个csv文件并相互混合使用

Javascript 如何加载多个csv文件并相互混合使用,javascript,d3.js,Javascript,D3.js,我在理解d3方面有问题。我试图加载一堆.csv文件,同时在左栏有一个时间戳,在右栏有一个整数,表示教室中任何时间点的人数每个教室都有自己的.csv文件 现在的想法是制作一个饼图,代表一天的出席人数,在多个教室之间进行分配。例如,65%的教室1、23%的教室2和12%的教室3 我正在努力理解我是如何阅读这些内容的,显然d3.csv解析器中的所有内容都超出了它之外的所有内容的范围,这是非常违反直觉的。我无法从.csv方法之外访问正在解析的内容,这很奇怪,因为我正在读取.csv文件,如下所示: var

我在理解d3方面有问题。我试图加载一堆.csv文件,同时在左栏有一个时间戳,在右栏有一个整数,表示教室中任何时间点的人数每个教室都有自己的.csv文件

现在的想法是制作一个饼图,代表一天的出席人数,在多个教室之间进行分配。例如,65%的教室1、23%的教室2和12%的教室3

我正在努力理解我是如何阅读这些内容的,显然d3.csv解析器中的所有内容都超出了它之外的所有内容的范围,这是非常违反直觉的。我无法从.csv方法之外访问正在解析的内容,这很奇怪,因为我正在读取.csv文件,如下所示:

var files = ["Bibliotheek S2.csv","Bibliotheek S8.csv","Euclides S23.csv","Lovelace Ledeganck.csv","Mercator S8.csv","Nadar S8.csv","Ortelius S8.csv","Practicum S2.csv","S12.csv","Thetis INW.csv","Turing S9.csv","Van Straelen S8.csv","Zuse S9.csv"];

dt = {};
files.forEach(function(f){
    d3.csv("lokalen/"+f,function(data){
        dt[f] = data;
    });
});
我将如何继续这样做?我在这里完全迷路了

谢谢,
米兰

并非所有在d3.csv范围内的东西都不可用:d3.csv是异步的。简言之,d3.csv回调中的代码直到csv文件下载后才会执行。但是,d3.csv之后的代码会立即执行。在您的情况下,如果尝试在files.forEach循环之后立即访问dt,则文件将尚未下载

为了解决这个问题,您需要找到一种方法,让应用程序的其余部分等待所有文件下载完毕。例如:

var files = ["Bibliotheek S2.csv","Bibliotheek S8.csv","Euclides S23.csv","Lovelace Ledeganck.csv","Mercator S8.csv","Nadar S8.csv","Ortelius S8.csv","Practicum S2.csv","S12.csv","Thetis INW.csv","Turing S9.csv","Van Straelen S8.csv","Zuse S9.csv"];

files.forEach(function(f){
    d3.csv("lokalen/"+f,function(data){
      dt[f] = data;
      if (d3.keys(dt).length == files.length){
      // Whatever you'd like to do once you load all the data
      console.log(d3.keys(dt)) // For example to check our work 
      }
    });
});

当每个文件完成加载时,if语句检查是否所有文件都存储在dt中。如果是,它可以处理所有数据;如果没有,则在下一个文件加载(再次检查)之前不会执行任何操作。最后一个文件将执行您希望对完整数据集执行的任何操作。

您可以嵌套调用…检查此项。