【发布时间】:2017-02-01 16:52:41
【问题描述】:
我有这个 JSON
[{
"month": "september",
"detail": [{
"date": "01-09",
"value": 5
}, {
"date": "02-09",
"value": 5
}, {
"date": "03-09",
"value": 5
}, {
"date": "04-09",
"value": 5
}, {
"date": "05-09",
"value": 5
}, {
"date": "06-09",
"value": 5
}, {
"date": "07-09",
"value": 0
}]
},
{
"month": "october",
"detail": [{
"date": "01-10",
"value": 10
}, {
"date": "02-10",
"value": 5
}, {
"date": "03-10",
"value": 5
}, {
"date": "04-10",
"value": 5
}, {
"date": "05-10",
"value": 5
}, {
"date": "07-10",
"value": 10
}]
}
我想使用 d3nest 为每个特定月份汇总对象“详细信息”中的所有“值”。如果您计算每个特定月份的所有值,它将导致:september-value: 30 & october-value: 40。
我尝试过嵌套它,但无法正确总结每个月的值。查看我的代码。
d3.json('runningdata.json', function (error, data) {
console.log(data);
var Total = d3.nest()
.key(function(d) { return d.month; })
.rollup(function(value) { return d3.sum(value, function(v) { return v.detail.value; }); })
.entries(data);
console.log(JSON.stringify(Total));
});
以上所有这些都会导致:
[{"key":"september","values":0},{"key":"october","values":0}]
您可以注意到“键”工作正常,它们以月份为值。但是“值”字段的结果为 0。我想要实现的目标是:
[{"key":"september","values":30},{"key":"october","values":40}]
但是当我尝试这个时:
.rollup(function(value) { return d3.sum(value, function(v) { return v.detail[0].value; }); })
代替:
.rollup(function(value) { return d3.sum(value, function(v) { return v.detail.value; }); })
它显示了数组中第一个对象的值。
[{"key":"september","values":5},{"key":"october","values":10}]
我做错了什么?我一直在阅读有关 d3 嵌套的信息。 欢迎任何帮助。
注意: 我试图实现这一点,以制作一个显示每个月总数的图表,当您单击特定月份时,它将以天为单位查看其月份的详细信息。
【问题讨论】:
-
您可以只使用基本的
.reduce()函数。我会发布解决方案 -
查看我的更新解决方案
标签: javascript arrays json d3.js