D3js折叠具有重复属性的对象

时间:2016-01-19 20:48:01

标签: d3.js

var dataset = [
 {'color': 'red', 'amount': 10},
 {'color': 'green', 'amount': 10},
 {'color': 'red', 'amount': 30},
 {'color': 'blue', 'amount': 20}
];

我想将数据集折叠到newDataset数组中,只使用每种颜色中的一种颜色添加了如下所示的amount属性:

newDataset = [
 {'color': 'red', 'amount': 40}, //combined 2 rows
 {'color': 'green', 'amount': 10},
 {'color': 'blue', 'amount': 20}
]

我在javascript中使用for循环成功完成此操作,但想知道是否有d3.js辅助函数这样的情况?我似乎无法在文档中找到一个,但我不是最好的文档阅读器......

1 个答案:

答案 0 :(得分:0)

d3.nest()就是这样。

d3.nest().key(function(d){return d.color;})
         .rollup(function(a){
              return a.reduce(function(p,c) {
                   return p+c.amount;
              },0)})
         .entries(dataset)
         .reduce(function(p,c) {p.push({ 'color': c.key, 'amount': c.values });return p;},[]);  // <-- added to satisfy comments below.