js中[[t1, t2], [t3,t4], [t5,t6]]中t1~t2,t3~t4,t5~t6表示不同的时间范围,t1~t6都是Date格式,同时其中存在相同的时间范围,怎么用一个函数将这些范围合并
时间: 2023-12-11 13:02:33 浏览: 51
你可以使用以下函数将这些时间范围合并成一个不含重复范围的数组:
```javascript
function mergeTimeRanges(ranges) {
// 先按照时间的起点排序
ranges.sort((a, b) => a[0] - b[0]);
const mergedRanges = [];
let currentRange = ranges[0];
for (let i = 1; i < ranges.length; i++) {
const range = ranges[i];
// 如果当前范围的终点比下一个范围的起点小,则说明二者无交集,将当前范围加入结果数组中,并更新当前范围为下一个范围
if (currentRange[1] < range[0]) {
mergedRanges.push(currentRange);
currentRange = range;
} else {
// 否则说明二者有交集,将当前范围的终点更新为二者的终点的最大值
currentRange[1] = new Date(Math.max(currentRange[1].getTime(), range[1].getTime()));
}
}
// 将最后一个范围加入结果数组中
mergedRanges.push(currentRange);
return mergedRanges;
}
```
注意,在比较时间范围的起点和终点时,需要使用 Date 对象的 `getTime()` 方法将其转换为时间戳进行比较。在更新时间范围的终点时,需要使用 `new Date()` 方法将时间戳转换为 Date 对象。例如,对于输入 `[[new Date('2021-01-01'), new Date('2021-01-03')], [new Date('2021-01-02'), new Date('2021-01-06')], [new Date('2021-01-08'), new Date('2021-01-10')], [new Date('2021-01-15'), new Date('2021-01-18')]]`,函数会返回 `[[new Date('2021-01-01'), new Date('2021-01-06')], [new Date('2021-01-08'), new Date('2021-01-10')], [new Date('2021-01-15'), new Date('2021-01-18')]]`。