我有这样的数据结构(CSV文件):
Datum,Name,Kategorie,Betrag
01/10/15,,Lohn,1586.7
02/10/15,,lunch,-4.55
02/10/15,kaisla,Ausgehen,-16.2
我要做的是按照这样的日期总结。
var summedData = d3.nest()
.key(function(d) { return d.Datum;})
.rollup(function(v) { return {
date: v.Datum,
total: d3.sum(v, function(d) { return d.Betrag; }),
category: v.Kategorie};
})
.entries(data);
但是这会返回一个这样的对象:
object{
key: "01/10/2015"
values: object{
date: undefined
category: undefined
sum: 1586.7
}
}
我不明白为什么date
和category
未定义以及如何修复它。有人可以帮忙吗?
答案 0 :(得分:2)
在.rollup
中,v
是一个数组,v.Datum
和v.Kategorie
未定义。做这样的事情:
return {
date: v[0].Datum,
...
适用于Datum
,因为它会重复并且是唯一的,但是Kategorie
赢了,所以如何:
category: v.map(function(d){
return d.Kategorie;
})
当然这取决于你的最终目标。
完整代码:
<!DOCTYPE html>
<html>
<head>
<script data-require="d3@3.5.3" data-semver="3.5.3" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.js"></script>
</head>
<body>
<script>
var data = [{"Datum":"01/10/15","Name":"","Kategorie":"Lohn","Betrag":"1586.7"},{"Datum":"02/10/15","Name":"","Kategorie":"lunch","Betrag":"-4.55"},{"Datum":"02/10/15","Name":"kaisla","Kategorie":"Ausgehen","Betrag":"-16.2"}];
var summedData = d3.nest()
.key(function(d) {
return d.Datum;
})
.rollup(function(v) {
return {
date: v[0].Datum,
total: d3.sum(v, function(d) {
return d.Betrag;
}),
category: v.map(function(d){
return d.Kategorie;
})
};
})
.entries(data);
console.log(summedData);
</script>
</body>
</html>
&#13;