如果我有一个包含20个键和超过3000个条目的对象,是否有办法使用d3来整理整个对象?
例如,如果我有:
Country: Germany, val2007:9.3, val2008:8.6
Country: Germany,val2007:3.4, val2008:1.0
Country: Austria, val2007:23.0, val2008:9.2
Country: Austria, val2007:1.2, val2007:3.2
我可以按如下方式生成数组吗?
Country: Germany,val2007:12.7, val2008:9.6
Country: Austria, val2007:24.2, val2008:12.4
请记住,我不会一直知道关键名称,'val'字段可以是从val2007和val2008到val1997的任何内容 - > val2017
答案 0 :(得分:3)
D3没有提供一种简单的方法,但它提供了一些有用的工具。第一个是d3.nest
(docs),它可以对特定键上的行进行分组。在那之后,你需要弄清楚如何对德国自己的行进行求和 - 这里我使用Array#reduce
,我认为这对于这类问题很有用:
function rollup(rows) {
return rows.reduce(function(agg, row) {
// you could pre-calculate this if all rows had the same keys
d3.keys(row)
.filter(function(k) { return k !== 'Country' })
.forEach(function(k) {
if (!(k in agg)) agg[k] = 0;
agg[k] += row[k];
});
return agg
}, {});
}
data = d3.nest()
.key(function(d) { return d.Country; })
.rollup(rollup)
.entries(data)
.map(function(entry) {
entry.values.Country = entry.key;
return entry.values;
});
你可以在这里看到工作小提琴:http://jsfiddle.net/nrabinowitz/MB3yz/