我正在尝试使用d3.js从从csv文件加载的数据集中的一列中获取所有唯一值。
在阅读中我发现了如下解决方案:
d3.csv("Data/FabSDO.csv", function(data) {
return d3.map(data, function(d){return d.Distretto;}).keys()
})
我没有一个唯一值数组,而是一个“ Promise”,其中每一行都是所有数据列名称的数组:
Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: Array(500)
[0 … 99]
0: (14) ["", "Branca", "Dipartimento", "Distretto", "Gruppo erogatore", "Erogatore", "Matricola", "Regime", "DRG", "Mese", "Anno", "Volume", "Costo", "Valore"]
更新:
我找到了一种解决方法,我不知道这是否是最有效的解决方案。技巧是将列直接传递给then()函数。 我利用datalib库获得唯一性。
d3.csv("Data/FabSDO.csv", function(data) {
return data.Distretto
}).then(function(col) {
return dl.unique(col)
})
问题是我想通过列处理来保持csv的加载,但是如果我这样做:
foo = d3.csv("Data/FabSDO.csv", function(data) {
return data
})
foo.then(function(col) {
return dl.unique(col.Distretto)
})
我收到“ TypeError:无法读取未定义的属性'length'”。上校似乎不再具有Distretto属性。
UPDATE2
我想我找到了一种在第二次调用中访问列值的方法。这样可以。 (我使用jQuery each()提取列值)
foo = d3.csv("Data/FabSDO.csv", function(data) {
return data
})
var group = 'Distretto'
foo.then(function(col) {
var vals = []
$.each(col, function(i, j){vals.push(j[group])})
vals = dl.unique(vals)
})