d3.js如何获取对象数组的总和?

时间:2017-10-28 12:17:58

标签: javascript arrays d3.js

我有csv文件

DATE OF ARREST, ARREST RESOLUTION, COUNT
01/01/1988, BONDED OUT, 1
01/01/1988, BONDED OUT, 1
01/01/1988, BONDED OUT, 1
02/01/1988, BONDED OUT, 1
02/01/1988, BONDED OUT, 1

我想用上面的数据创建一个图表视图。要做到这一点,我必须总结" COUNT"对于每个日期。例如,我需要01/01/1988,BONDED OUT,3 ...在这一天我有3个案例。要解析我使用的日期

var parseDate = d3.timeParse("%m/%d/%Y");

 data.forEach(
  function(d){
  d.count = +d["COUNT"];
  d.date = parseDate(d["DATE OF ARREST"]);
})

图表正确显示年份,但案例数始终为1.我如何计算" COUNT"每年?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望转换数据并在同一天汇总所有COUNT。您可以使用d3.nest完成此操作。

var dataAsCsv = `DATE OF ARREST,ARREST RESOLUTION,COUNT
01/01/1988,BONDED OUT,1
01/01/1988,BONDED OUT,1
01/01/1988,BONDED OUT,1
02/01/1988,BONDED OUT,1
02/01/1988,BONDED OUT,1`;

var data = d3.csvParse(dataAsCsv);

var parseDate = d3.timeParse("%m/%d/%Y");

var convertedData = d3.nest()
  .key(function(d) { return d["DATE OF ARREST"]; })
  .rollup(function(v) {
      return {
        date: parseDate(v[0]["DATE OF ARREST"]),
        count: d3.sum(v, function(d) { return +d["COUNT"]; })
      }
  })
  .entries(data).map(function(d) { return d.value});

console.log(convertedData);
<script src="https://d3js.org/d3.v4.min.js"></script>