function mergeTimeSlots(timeList) {
// 排序时间段
timeList.sort((a, b) => {
return new Date(a.startTime) - new Date(b.startTime);
});
// 合并重叠的时间段
let mergedTimeList = [timeList[0]];
for (let i = 1; i < timeList.length; i++) {
let currentSlot = timeList[i];
let previousSlot = mergedTimeList[mergedTimeList.length - 1];
// 如果当前时间段的开始时间和上一条相同,且结束时间选择长的
if (
currentSlot.startTime === previousSlot.startTime &&
currentSlot.endTime > previousSlot.endTime
) {
previousSlot.endTime = currentSlot.endTime;
}
// 如果时间段重叠,且结束时间选择长的
else if (
currentSlot.startTime <= previousSlot.endTime &&
currentSlot.endTime > previousSlot.endTime
) {
previousSlot.endTime = currentSlot.endTime;
}
// 如果时间段不重叠,直接添加到结果中
else if (currentSlot.startTime > previousSlot.endTime) {
mergedTimeList.push(currentSlot);
}
}
return mergedTimeList;
}
// 示例用法
let timeList =[
{
"startTime": "2023-09-01",
"endTime": "2023-09-01"
},
{
"startTime": "2023-09-01",
"endTime": "2023-09-01"
},
{
"startTime": "2023-09-01",
"endTime": "2023-09-01"
},
{
"startTime": "2023-09-02",
"endTime": "2023-09-03"
},
{
"startTime": "2023-09-02",
"endTime": "2023-09-02"
},
{
"startTime": "2023-09-02",
"endTime": "2023-09-02"
},
{
"startTime": "2023-09-02",
"endTime": "2023-09-02"
},
{
"startTime": "2023-09-02",
"endTime": "2023-09-02"
},
{
"startTime": "2023-09-02",
"endTime": "2023-09-02"
},
{
"startTime": "2023-09-03",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-03",
"endTime": "2023-09-03"
},
{
"startTime": "2023-09-03",
"endTime": "2023-09-03"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-06"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-06"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-04",
"endTime": "2023-09-04"
},
{
"startTime": "2023-09-06",
"endTime": "2023-09-07"
},
{
"startTime": "2023-09-06",
"endTime": "2023-09-06"
},
{
"startTime": "2023-09-07",
"endTime": "2023-09-08"
},
{
"startTime": "2023-09-08",
"endTime": "2023-09-10"
},
{
"startTime": "2023-09-08",
"endTime": "2023-09-08"
},
{
"startTime": "2023-09-08",
"endTime": "2023-09-08"
},
{
"startTime": "2023-09-08",
"endTime": "2023-09-08"
},
{
"startTime": "2023-09-08",
"endTime": "2023-09-08"
},
{
"startTime": "2023-09-08",
"endTime": "2023-09-08"
},
{
"startTime": "2023-09-11",
"endTime": "2023-09-24"
},
{
"startTime": "2023-09-11",
"endTime": "2023-09-11"
},
{
"startTime": "2023-09-11",
"endTime": "2023-09-11"
},
{
"startTime": "2023-09-13",
"endTime": "2023-09-14"
},
{
"startTime": "2023-09-14",
"endTime": "2023-09-24"
}
];
let mergedTimeList = mergeTimeSlots(timeList);
console.log(mergedTimeList);
//输出
[
{
"startTime": "2023-09-01",
"endTime": "2023-09-01"
},
{
"startTime": "2023-09-02",
"endTime": "2023-09-10"
},
{
"startTime": "2023-09-11",
"endTime": "2023-09-24"
}
]
注意:上述方法对于时间段会重叠但未确保连续的情况也能处理,但是没有对不需要合并的时间段情况进行处理。如果需要对不需要合并的时间段进行处理,可以添加一个判断条件。
网友评论