见注释
function merge(intervals) { // 按区间的左端点从小到大排序 intervals.sort((a, b) => a.start - b.start) // 准备目标数组 const target = [] // 当intervals数组不为空时,将首元素加入目标数组 if (intervals[0]) target.push(intervals[0]) // 从索引1开始遍历intervals数组,与target数组中的最后一个元素(区间)做对比 for (let i = 1; i < intervals.length; i++) { // target数组最后一个元素的右端点大于intervals[i]的右端点,表示intervals[i]位于当前区间内,不执行操作 if (target[target.length - 1].end >= intervals[i].end) continue // target数组最后一个元素的右端点大于intervals[i]的左端点,表示两个区间有交集,更新当前元素右端点 else if (target[target.length - 1].end >= intervals[i].start) target[target.length - 1].end = intervals[i].end // 除以上情况外,表示两个区间无交集,将intervals[i]加入target数组 else target.push(intervals[i]) } return target }