2012-10-24 70 views
1

我需要将8-10个CSV文件导入到一些JS代码中。每个文件都有大约8个不同的列。我想将这些信息存储在一个对象中(可能根据其中一个ID字段标识对象)。问题是,我能想到看起来像最简单的方法:用Javascript导入多个CSV文件

var authorArr = []; 
d3.csv("data/authors.csv", function(csv) { 
    csv.forEach(function(d) { 
    authorArr[d.record_id] = []; 
    d.record_id = +d.record_id; 
    d.name = d.name 
    d.name_inverted = d.name_inverted; 
    d.role = d.role; 
    d.sequence = +d.sequence; 
    d.is_person = d.is_person; 

    authorArr[d.record_id] = d.name; 
    authorArr[d.record_id] = d.role; 
    etc... 

当然这不可能是最快的办法......另外,还有相当多的重复RECORD_ID值的为好,所以每次有是一个重复,我会用我可怕的方法失去所有以前的数据。

我不确定这是否足够详细。如果不是,我会很高兴增加更多。

回答

1

您可以为新/当前记录使用临时变量。你的例子也看起来像你不想要一个数组(有空白),但一个地图。这里是我将如何加载数据:

var authorMap = {} 

var loadCSV = function(file){ 
    d3.csv(file, function(error, data) { 
     data.forEach(function(d) { 
      var a = authorMap[d.record_id] = {} 
      a.record_id = d.record_id 
      a.name  = d.name 
      a.role  = d.role 
     }); 
    }); 
} 

loadCSV("file1.csv") 
loadCSV("file2.csv") 
+0

我仍然是相当新的程序员,所以我不太了解地图。我会鼓捣你的方法,看看我的想法。有什么方法可以自动化标识符吗? (例如:而不是要求d.name并将其命名为d.name,我可以用列名称来命名每列) 非常感谢您的帮助! – 1080p

+0

我想你首先需要了解更多关于[Javascript](http://bonsaiden.github.com/JavaScript-Garden/)。关于[数组vs对象](http://stackoverflow.com/questions/688097/objects-vs-arrays-in-javascript-for-key-value-pairs)等等东西。 :-) – Juve