我正在尝试在一小时的相同时间内对日期进行分组。但是,有些日期似乎被排除在外。我错过了什么?预期结果为[[date1, date2], [date3], [date4]]
function groupDates(dates) {
var result = [];
var intervalStart = dates[0];
var grp = []
dates.forEach((d,i) => {
var diff = d.getTime() - intervalStart.getTime()
if(diff/1000/60 <= 60) {
grp.push(d)
} else {
intervalStart = date;
grp = [d]
result.push(grp)
}
})
return result
}
console.log(groupDates([new Date('2017-01-01 17:24'),
new Date('2017-01-01 17:25'),
new Date('2017-01-01 18:26'),
new Date('2017-01-01 19:27')]))
答案 0 :(得分:2)
问题出在else
块中。您检测到当前组应该结束,但是在将其推送到result
阵列之前将其丢弃。
将result.push(grp)
行移至else
块的顶部,并在循环后添加额外的result.push(grp)
以处理最后一个组。
function groupDates(dates) {
var result = [];
var intervalStart = dates[0];
var grp = [];
dates.forEach((d,i) => {
var diff = d.getTime() - intervalStart.getTime();
if(diff/1000/60 <= 60) {
grp.push(d);
} else {
result.push(grp);
intervalStart = d;
grp = [d];
}
})
result.push(grp);
return result;
}
console.log(groupDates([new Date('2017-01-01 17:24'),
new Date('2017-01-01 17:25'),
new Date('2017-01-01 18:26'),
new Date('2017-01-01 19:27')]));
答案 1 :(得分:1)
您希望小时级别分组,请尝试
var output = Object.values(inputArr.reduce( function(a,b){
var date = new Date(b);
date.setHours( date.getHours(), 0, 0, 0 ); //remove minutes, seconds, ms
var time = date.getTime(); //get millisecond time value as key
a[ date.getTime() ] = a[ date.getTime() ] || [];
a[ date.getTime() ].push( b ); //push the value into array
return a;
}, {}));
var inputArr = [new Date('2017-01-01 17:24'),
new Date('2017-01-01 17:25'),
new Date('2017-01-01 18:26'),
new Date('2017-01-01 19:27')];
var output = Object.values(inputArr.reduce( function(a,b){
var date = new Date(b);
date.setHours( date.getHours(), 0, 0, 0 );
var time = date.getTime()
a[ date.getTime() ] = a[ date.getTime() ] || [];
a[ date.getTime() ].push( b );
return a;
}, {}));
console.log( output );