如果有一个.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?
答案 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;