在javascript中每小时对数组中的对象进行分组

时间:2017-03-02 16:13:55

标签: javascript

我在数组中有这个对象,

var progress = [ 
    {
        "duration" : 120,
        "dateAdded" : "2017-03-02T15:45:31.315Z"
    }, 
    {
        "duration" : 120,
        "dateAdded" : "2017-03-02T15:47:32.150Z"
    },{
        "duration" : 120,
        "dateAdded" : "2017-03-02T12:45:32.150Z"
    },{
        "duration" : 120,
        "dateAdded" : "2017-03-02T12:47:32.150Z"
    },{
        "duration" : 120,
        "dateAdded" : "2017-03-02T10:45:32.150Z"
    }
]

如何每小时对对象进行分组? 我希望输出

var progress = [{duration:340,time:"15:00"},{duration:340,time:"12:00"},{duration:120,time:"10:00"}]

所以这里发生的是,我每小时都添加了所有持续时间。例如,在时间15:00,我有120 + 120 = 340.

我将使用Timeframe的解决方案。

1 个答案:

答案 0 :(得分:2)

您可以只为具有日期和小时的部分剪切日期,并将其分组到哈希表中。



var progress = [{ duration: 120, dateAdded: "2017-03-02T15:45:31.315Z" }, { duration: 120, dateAdded: "2017-03-02T15:47:32.150Z" }, { duration: 120, dateAdded: "2017-03-02T12:45:32.150Z" }, { duration: 120, dateAdded: "2017-03-02T12:47:32.150Z" }, { duration: 120, dateAdded: "2017-03-02T10:45:32.150Z" }],
  hash = Object.create(null),
  grouped = [];
  
progress.forEach(function (a) {
    var key = a.dateAdded.slice(11, 13);
    if (!hash[key]) {
        hash[key] = { duration: 0, time: key + ':00' };
        grouped.push(hash[key]);
    }
    hash[key].duration += a.duration;
});

grouped.sort(function (a, b) {
    return b.time.localeCompare(a.time);
});

console.log(grouped);

.as-console-wrapper { max-height: 100% !important; top: 0; }