我在数组中有这个对象,
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的解决方案。
答案 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; }