【问题标题】:D3.js.nest rollup with cumulative sum using reduceD3.js.nest 使用reduce进行累积和汇总
【发布时间】:2020-08-11 06:48:43
【问题描述】:

我正在尝试使用 D3.nest 从现有数组中获取累积总和。

learnjsdata.com 网站有这个example 使用reduce

var landSum = data.reduce(function(sum, d) {
  return sum + d.land_area;
}, 0);
console.log(landSum);

我尝试将其调整为d3.nest rollup,如下所示。

var caseByDate = 
    [
      {
        "report_date": "2020-03-30",
        "case_count": 1
      },
      {
        "report_date": "2020-04-03",
        "case_count": 1
      },
      {
        "report_date": "2020-04-07",
        "case_count": 1
      }
    ]
    
var caseByDateCum = d3.nest()
    .key(function(d) { return d.report_date; })
    .rollup(function(v) { 
        return v.reduce(function(sum, d) {
            return sum + d.case_count;
          }, 0);
     })
    .entries(caseByDate)
    .map(function(group) {
        return {
            report_date: group.key,
            cum_case_count: group.value
        }
    });

console.log(caseByDateCum);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

但不返回累积和,它只返回cum_case_count中的原始数据。我期望结果是:

var caseByDateCum = 
[
  {
    "report_date": "2020-03-30",
    "cum_case_count": 1
  },
  {
    "report_date": "2020-04-03",
    "cum_case_count": 2
  },
  {
    "report_date": "2020-04-07",
    "cum_case_count": 3
  }
]

我找不到任何搜索有助于描述如何在 d3.nest rollup 中使用 reduce 来获得累计总数。

Reduce sum 应该是一个“累加器”,v 值是由key 值分组的数字数组。所以它应该在rollup 中工作。

我错过了什么?

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    我认为使用纯javascript会更容易:

    let caseByDate = [
        {
            "report_date": "2020-03-30",
            "case_count": 1
        },
        {
            "report_date": "2020-04-03",
            "case_count": 1
        },
        {
            "report_date": "2020-04-07",
            "case_count": 1
        }
    ];
    
    
    caseByDate.forEach(function (e) {
        this.count = (this.count || 0) + e.case_count;
        e.case_count = this.count;
    }, Object.create(null));
    
    console.log(caseByDate);

    【讨论】:

    • 谢谢,但专门为d3.nest rollup寻找答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2020-06-06
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多