有没有人知道将创建关联数组的Javascript .csv文件阅读器?

时间:2018-04-18 04:59:51

标签: javascript csv d3.js associative-array

如果有一个.csv文件阅读器可以将“键”作为阅读器的输入来创建一个关联数组,那将会很棒。

我正在读一个看起来像这样(简化)的.csv文件:

State,ID,Population
Alabama,AL,1234
California,CA,5678
Hawaii,HI,90123
North Dakota,ND,45678
etc...

我想使用.csv文件阅读器来允许我这样做:

csv_to_associatve_array("file.csv", function(foo,'ID') {

    // Where ID is foo's "key" using the ID column of the csv file 

    // Then access foo as an associative array something like this:

    console.log(foo['ND'].State)
});

这应该将“北达科他州”记录到控制台。

我搜索了很多,似乎找不到任何东西。也许我使用了错误的关键字。

在任何情况下,如果你有一个巧妙的方法来使用密钥访问csv数据,这将是非常漂亮的。否则,如果没有其他选择,您是否知道从'普通'js数组创建关联数组的方法,noob可以理解并访问数组[ID] .State?

1 个答案:

答案 0 :(得分:3)

您可以使用创建地图的d3.map(),即键值映射,这基本上就是您要查找的内容。使用d3.map而不是使用ES6引入的JavaScript内置Map类型的优点是,您可以提供一个用于提取密钥值的关键函数(在你的情况下ID)。地图的创建变得像

一样简单
const states = d3.map(data, d => d.ID);

然后,您可以使用states.get(key)访问单个值,即州。

看一下演示用法的以下代码段:



// Setup for loading of local csv data. Not relevant for answer. 
const csv = URL.createObjectURL(new Blob([
`State,ID,Population
Alabama,AL,1234
California,CA,5678
Hawaii,HI,90123
North Dakota,ND,45678`
]));
// End of setup.

d3.csv(csv)
  .then(data => {
    const states = d3.map(data, d => d.ID); // Converts the parsed CSV data to a map.
    console.log(states.get("ND").State);    // > North Dakota
  });

<script src="https://d3js.org/d3.v5.js"></script>
&#13;
&#13;
&#13;