d3.next.rollup返回undefined

时间:2015-12-13 15:45:17

标签: javascript d3.js

我有这样的数据结构(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
  }
}

我不明白为什么datecategory未定义以及如何修复它。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

.rollup中,v是一个数组,v.Datumv.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;
&#13;
&#13;