Javascript 按周/月/年分组

标签 javascript jquery underscore.js

我有一个 json 数组,其中包含数据。我想按周、月和年对其中的数据进行分组。

我尝试关注 Javascript groupby 的讨论

如何获得按月和年分组的值的总和,如下面的预期输出所示?

按照引用的示例,我得到如下输出

每月分组的输出

Monthly Grouping

年度分组的输出

Yearly Grouping

这是数据和代码

function displayCalc() {
    var data= [{
            "EVENT_DATE": "2015-06-27",
            "NUMBER_EVENTS": 3,
            "FULL_EVENT_DURATION": 42.24,
            "FIRST_PAUSE": 42.24,
            "SECOND_PAUSE": 14.08,
            "THIRD_PAUSE": 42.24,
            "FOURTH_PAUSE": 42.24,
            "FIFTH_PAUSE": 42.24,
            "SIXTH_PAUSE": 42.24
        }, {
            "EVENT_DATE": "2015-06-28",
            "NUMBER_EVENTS": 3,
            "FULL_EVENT_DURATION": 27.54,
            "FIRST_PAUSE": 27.54,
            "SECOND_PAUSE": 9.18,
            "THIRD_PAUSE": 27.54,
            "FOURTH_PAUSE": 27.54,
            "FIFTH_PAUSE": 27.54,
            "SIXTH_PAUSE": 27.54
        },{
            "EVENT_DATE": "2015-07-02",
            "NUMBER_EVENTS": 39,
            "FULL_EVENT_DURATION": 354.39,
            "FIRST_PAUSE": 26.19,
            "SECOND_PAUSE": 9.08,
            "THIRD_PAUSE": 29.96,
            "FOURTH_PAUSE": 32.79,
            "FIFTH_PAUSE": 35,
            "SIXTH_PAUSE": 36.47
        }, {
            "EVENT_DATE": "2015-07-03",
            "NUMBER_EVENTS": 66,
            "FULL_EVENT_DURATION": 593,
            "FIRST_PAUSE": 26.26,
            "SECOND_PAUSE": 8.98,
            "THIRD_PAUSE": 29.21,
            "FOURTH_PAUSE": 31.24,
            "FIFTH_PAUSE": 33.21,
            "SIXTH_PAUSE": 34.56
        },{
            "EVENT_DATE": "2015-08-01",
            "NUMBER_EVENTS": 6,
            "FULL_EVENT_DURATION": 57.21,
            "FIRST_PAUSE": 28.6,
            "SECOND_PAUSE": 9.53,
            "THIRD_PAUSE": 35.33,
            "FOURTH_PAUSE": 36.17,
            "FIFTH_PAUSE": 36.68,
            "SIXTH_PAUSE": 37.02
        }, {
            "EVENT_DATE": "2015-08-02",
            "NUMBER_EVENTS": 12,
            "FULL_EVENT_DURATION": 94.47,
            "FIRST_PAUSE": 23.22,
            "SECOND_PAUSE": 7.87,
            "THIRD_PAUSE": 25.1,
            "FOURTH_PAUSE": 25.36,
            "FIFTH_PAUSE": 25.51,
            "SIXTH_PAUSE": 25.62
        }, {
            "EVENT_DATE": "2015-09-01",
            "NUMBER_EVENTS": 12,
            "FULL_EVENT_DURATION": 88.55,
            "FIRST_PAUSE": 6.84,
            "SECOND_PAUSE": 7.37,
            "THIRD_PAUSE": 9.18,
            "FOURTH_PAUSE": 9.82,
            "FIFTH_PAUSE": 10.21,
            "SIXTH_PAUSE": 10.48
        }, {
            "EVENT_DATE": "2015-09-03",
            "NUMBER_EVENTS": 15,
            "FULL_EVENT_DURATION": 116.13,
            "FIRST_PAUSE": 6.95,
            "SECOND_PAUSE": 7.74,
            "THIRD_PAUSE": 9.52,
            "FOURTH_PAUSE": 10.99,
            "FIFTH_PAUSE": 12.39,
            "SIXTH_PAUSE": 13.33
        }];


    var grouped = _.groupBy(data, function (item) {
        return item.EVENT_DATE;
    });

    var groupedByYear = _.groupBy(data, function (item) {
        return item.EVENT_DATE.substring(0, 4);
    });

    var groupedByMonth = _.groupBy(data, function (item) {
        return item.EVENT_DATE.substring(0, 7);
    });

    console.log(grouped);
    console.log(groupedByYear);
    console.log(groupedByMonth);
}

我可以请求帮助来实现这一目标吗?

生成的输出如下

每周汇总数据

     var jsonData = [{
    "EVENT_DATE": "2015-01-04",
    "NUMBER_EVENTS": 30,
    "FULL_EVENT_DURATION": 100.27,
    "FIRST_PAUSE": 142.24,
    "SECOND_PAUSE": 143.08,
    "THIRD_PAUSE": 305.24,
    "FOURTH_PAUSE":271.24,
    "FIFTH_PAUSE": 289.24,
    "SIXTH_PAUSE": 238.24
  }, {
    "EVENT_DATE": "2015-01-11",
    "NUMBER_EVENTS": 300,
    "FULL_EVENT_DURATION": 131.27,
    "FIRST_PAUSE": 124.24,
    "SECOND_PAUSE": 347.08,
    "THIRD_PAUSE": 245.24,
    "FOURTH_PAUSE":345.24,
    "FIFTH_PAUSE": 168.24,
    "SIXTH_PAUSE": 458.24
  }, {
    "EVENT_DATE": "2015-01-18",
    "NUMBER_EVENTS": 49,
    "FULL_EVENT_DURATION": 456.27,
    "FIRST_PAUSE": 23.24,
    "SECOND_PAUSE": 37.08,
    "THIRD_PAUSE": 678.24,
    "FOURTH_PAUSE":345.24,
    "FIFTH_PAUSE": 123.24,
    "SIXTH_PAUSE": 123.24
  }]

每月汇总数据

   var jsonData = [{
    "EVENT_DATE": "2015-01",
    "NUMBER_EVENTS": 30,
    "FULL_EVENT_DURATION": 100.27,
    "FIRST_PAUSE": 142.24,
    "SECOND_PAUSE": 143.08,
    "THIRD_PAUSE": 305.24,
    "FOURTH_PAUSE":271.24,
    "FIFTH_PAUSE": 289.24,
    "SIXTH_PAUSE": 238.24
  }, {
    "EVENT_DATE": "2015-02",
    "NUMBER_EVENTS": 300,
    "FULL_EVENT_DURATION": 131.27,
    "FIRST_PAUSE": 124.24,
    "SECOND_PAUSE": 347.08,
    "THIRD_PAUSE": 245.24,
    "FOURTH_PAUSE":345.24,
    "FIFTH_PAUSE": 168.24,
    "SIXTH_PAUSE": 458.24
  }, {
    "EVENT_DATE": "2015-04",
    "NUMBER_EVENTS": 49,
    "FULL_EVENT_DURATION": 456.27,
    "FIRST_PAUSE": 23.24,
    "SECOND_PAUSE": 37.08,
    "THIRD_PAUSE": 678.24,
    "FOURTH_PAUSE":345.24,
    "FIFTH_PAUSE": 123.24,
    "SIXTH_PAUSE": 123.24
  }] 

年度汇总数据

       var jsonData = [{
    "EVENT_DATE": "2014",
    "NUMBER_EVENTS": 3000,
    "FULL_EVENT_DURATION": 1000.27,
    "FIRST_PAUSE": 1420.24,
    "SECOND_PAUSE": 1430.08,
    "THIRD_PAUSE": 3050.24,
    "FOURTH_PAUSE":2710.24,
    "FIFTH_PAUSE": 2890.24,
    "SIXTH_PAUSE": 2380.24
  }, {
    "EVENT_DATE": "2015",
    "NUMBER_EVENTS": 4000,
    "FULL_EVENT_DURATION": 131.27,
    "FIRST_PAUSE": 1240.24,
    "SECOND_PAUSE": 3470.08,
    "THIRD_PAUSE": 2450.24,
    "FOURTH_PAUSE":3450.24,
    "FIFTH_PAUSE": 1680.24,
    "SIXTH_PAUSE": 4580.24
  }]

最佳答案

您的代码中没有像 data 那样定义任何内容。 你应该做的是类似的事情。

var jsonData = [{
            "EVENT_DATE": "2015-06-27",
            "NUMBER_EVENTS": 3,
            "FULL_EVENT_DURATION": 42.24,
            "FIRST_PAUSE": 42.24,
            "SECOND_PAUSE": 14.08,
            "THIRD_PAUSE": 42.24,
            "FOURTH_PAUSE": 42.24,
            "FIFTH_PAUSE": 42.24,
            "SIXTH_PAUSE": 42.24
        }, {
            "EVENT_DATE": "2015-06-28",
            "NUMBER_EVENTS": 3,
            "FULL_EVENT_DURATION": 27.54,
            "FIRST_PAUSE": 27.54,
            "SECOND_PAUSE": 9.18,
            "THIRD_PAUSE": 27.54,
            "FOURTH_PAUSE": 27.54,
            "FIFTH_PAUSE": 27.54,
            "SIXTH_PAUSE": 27.54
        },{
            "EVENT_DATE": "2015-07-02",
            "NUMBER_EVENTS": 39,
            "FULL_EVENT_DURATION": 354.39,
            "FIRST_PAUSE": 26.19,
            "SECOND_PAUSE": 9.08,
            "THIRD_PAUSE": 29.96,
            "FOURTH_PAUSE": 32.79,
            "FIFTH_PAUSE": 35,
            "SIXTH_PAUSE": 36.47
        }, {
            "EVENT_DATE": "2015-07-03",
            "NUMBER_EVENTS": 66,
            "FULL_EVENT_DURATION": 593,
            "FIRST_PAUSE": 26.26,
            "SECOND_PAUSE": 8.98,
            "THIRD_PAUSE": 29.21,
            "FOURTH_PAUSE": 31.24,
            "FIFTH_PAUSE": 33.21,
            "SIXTH_PAUSE": 34.56
        },{
            "EVENT_DATE": "2015-08-01",
            "NUMBER_EVENTS": 6,
            "FULL_EVENT_DURATION": 57.21,
            "FIRST_PAUSE": 28.6,
            "SECOND_PAUSE": 9.53,
            "THIRD_PAUSE": 35.33,
            "FOURTH_PAUSE": 36.17,
            "FIFTH_PAUSE": 36.68,
            "SIXTH_PAUSE": 37.02
        }, {
            "EVENT_DATE": "2015-08-02",
            "NUMBER_EVENTS": 12,
            "FULL_EVENT_DURATION": 94.47,
            "FIRST_PAUSE": 23.22,
            "SECOND_PAUSE": 7.87,
            "THIRD_PAUSE": 25.1,
            "FOURTH_PAUSE": 25.36,
            "FIFTH_PAUSE": 25.51,
            "SIXTH_PAUSE": 25.62
        }, {
            "EVENT_DATE": "2015-09-01",
            "NUMBER_EVENTS": 12,
            "FULL_EVENT_DURATION": 88.55,
            "FIRST_PAUSE": 6.84,
            "SECOND_PAUSE": 7.37,
            "THIRD_PAUSE": 9.18,
            "FOURTH_PAUSE": 9.82,
            "FIFTH_PAUSE": 10.21,
            "SIXTH_PAUSE": 10.48
        }, {
            "EVENT_DATE": "2015-09-03",
            "NUMBER_EVENTS": 15,
            "FULL_EVENT_DURATION": 116.13,
            "FIRST_PAUSE": 6.95,
            "SECOND_PAUSE": 7.74,
            "THIRD_PAUSE": 9.52,
            "FOURTH_PAUSE": 10.99,
            "FIFTH_PAUSE": 12.39,
            "SIXTH_PAUSE": 13.33
        }];

var grouped = _.groupBy(jsonData, function (item) {
    return item.EVENT_DATE;
});

var groupedByYear = _.groupBy(jsonData, function (item) {
    return item.EVENT_DATE.substring(0, 4);
});

var groupedByMonth = _.groupBy(jsonData, function (item) {
    return item.EVENT_DATE.substring(0, 7);
});

console.log(grouped);
console.log(groupedByYear);
console.log(groupedByMonth);
//to get your desired result you can write this in a function
var groupedArray=[];
for ( key in groupedByMonth){
var obj = {};
obj.EVENT_DATE=key;
obj.FIFTH_PAUSE=0;
obj.FIRST_PAUSE=0;
obj.FOURTH_PAUSE=0;
obj.FULL_EVENT_DURATION=0;
obj.NUMBER_EVENTS=0;
obj.SECOND_PAUSE=0;
obj.SIXTH_PAUSE=0;
obj.THIRD_PAUSE=0;
  for(var i=0;i<groupedByMonth[key].length;i++){
    obj.FIFTH_PAUSE+=groupedByMonth[key][i].FIFTH_PAUSE;
    obj.FIRST_PAUSE+=groupedByMonth[key][i].FIRST_PAUSE;
    obj.FOURTH_PAUSE+=groupedByMonth[key][i].FOURTH_PAUSE;
    obj.FULL_EVENT_DURATION+=groupedByMonth[key][i].FULL_EVENT_DURATION;
    obj.NUMBER_EVENTS+=groupedByMonth[key][i].NUMBER_EVENTS;
    obj.SECOND_PAUSE+=groupedByMonth[key][i].SECOND_PAUSE;
    obj.SIXTH_PAUSE+=groupedByMonth[key][i].SIXTH_PAUSE;
    obj.THIRD_PAUSE+=groupedByMonth[key][i].THIRD_PAUSE;
  }
      obj.FIFTH_PAUSE=(obj.FIFTH_PAUSE/groupedByMonth[key].length).toFixed(2);
    obj.FIRST_PAUSE=(obj.FIRST_PAUSE/groupedByMonth[key].length).toFixed(2);
    obj.FOURTH_PAUSE=(obj.FOURTH_PAUSE).toFixed(2);
    obj.FULL_EVENT_DURATION=(obj.FULL_EVENT_DURATION/groupedByMonth[key].length).toFixed(2);
    obj.NUMBER_EVENTS=(obj.NUMBER_EVENTS/groupedByMonth[key].length).toFixed(2);
    obj.SECOND_PAUSE=(obj.SECOND_PAUSE/groupedByMonth[key].length).toFixed(2);
    obj.SIXTH_PAUSE=(obj.SIXTH_PAUSE/groupedByMonth[key].length).toFixed(2);
    obj.THIRD_PAUSE=(obj.THIRD_PAUSE/groupedByMonth[key].length).toFixed(2);

    groupedArray.push(obj);
}

console.log(groupedArray)

关于Javascript 按周/月/年分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35238329/

相关文章:

Javascript 对象和传递成员函数作为参数

javascript - 如何计算 Json 中的不同值

javascript - 使用带有 Underscore.js 的 Javascript 以另一种方式排序

javascript - 按对象键过滤对象数组

javascript - 在 Rails 中添加 Javascript

javascript - 如何确保js包含在ascx文件中?

javascript - 没有 #! 的 Ajax 导航

javascript - List.js 找到元素但仍然保留其他元素

javascript - 在 jquery 中隐藏一个 div

javascript - angularjs如何将两个数组合并为一个数组?