javascript - D3 中的计数总和

标签 javascript d3.js sum grouping

我有如下 JSON 数据。

[

  {
    "avg": 996.8,
    "sessions": [

      {
        "minTime": 0,
        "maxTime": 599,
        "count": 10
      },
      {
        "minTime": 600,
        "maxTime": 1199,
        "count": 2
      },
      {
        "minTime": 1800,
        "maxTime": 2399,
        "count": 4
      },
      {
        "minTime": 2400,
        "maxTime": 2999,
        "count": 3
      }
    ],"timestamp":1449360000},
  {
    "avg": 986.4,
    "sessions": [

      {
        "minTime": 0,
        "maxTime": 599,
        "count": 12
      },
      {
        "minTime": 600,
        "maxTime": 1199,
        "count": 1
      },
      {
        "minTime": 1200,
        "maxTime": 1799,
        "count": 2
      },
      {
        "minTime": 1800,
        "maxTime": 2399,
        "count": 2
      },
      {
        "minTime": 3000,
        "maxTime": 3599,
        "count": 3
      }
    ]
    ,"timestamp":1449540000}]

我需要获取数据

[{"avg" : 996.8,"sumcount" :19 , "timestamp":1449360000 }
{"avg": 986.4, "sumcount" :20 ,"timestamp":1449540000 }]

我尝试使用nest()(我知道代码不正确,仍在添加),但得到的计数=0

d3.json("Dwell.json", function(error,data){ 

var res = d3.nest()
            .key(function(d) { return d.avg; })
            .rollup(function(v) { return d3.sum(v, function (d) {return d.count})})
            .entries(data);
    console.log(JSON.stringify(res));
})

结果为[{"key":"996.8","values":0},{"key":"986.4","values":0}]

最佳答案

在纯 Javascript 中,您可以使用 Array.prototype.map()Array.prototype.reduce()用于收集计数和映射对象。

var data = [{ "avg": 996.8, "sessions": [{ "minTime": 0, "maxTime": 599, "count": 10 }, { "minTime": 600, "maxTime": 1199, "count": 2 }, { "minTime": 1800, "maxTime": 2399, "count": 4 }, { "minTime": 2400, "maxTime": 2999, "count": 3 }], "timestamp": 1449360000 }, { "avg": 986.4, "sessions": [{ "minTime": 0, "maxTime": 599, "count": 12 }, { "minTime": 600, "maxTime": 1199, "count": 1 }, { "minTime": 1200, "maxTime": 1799, "count": 2 }, { "minTime": 1800, "maxTime": 2399, "count": 2 }, { "minTime": 3000, "maxTime": 3599, "count": 3 }], "timestamp": 1449540000 }],
    result = data.map(function (a) {
        return {
            avg: a.avg,
            sumcount: a.sessions.reduce(function (s, b) { return s + b.count; }, 0),
            timestamp: a.timestamp
        };
    });

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

关于javascript - D3 中的计数总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34827355/

相关文章:

javascript - Semantic-UI - 如何清除下拉缓存

svg - 在D3模糊中对笔触进行描边

svg - 如何使用d3中的选择从元素中获取值

sql - 达到总和后停止 SQL 选择

sql - 单个查询中多个日期范围的总和?

javascript - 添加轴和起点之间的间距

javascript - 使用 Visual Studio (2010) 在 javascript 中编程?

javascript - 如何在不使用任何容器的情况下动态显示文本框上方的 div?

javascript - pie() 不接受对象数组

java - 如何使用格式化程序格式化二维数组之和?