Merge overlapping intervals

Merge sorted by start value overlapping intervals

by Alex Myronov

JavaScript

const merge = (intervals) => {
  const stack = []

	intervals.forEach((interval) => {
  	if (!stack.length) {
	    stack.push(interval)
      return
    }
  	
  	const last = stack[stack.length - 1]
    if (interval[0] <= last[1]) {
      stack[stack.length - 1][1] = Math.max(interval[1], last[1])
    } else {
      stack.push(interval)
    }
  })

  return stack
}

const intervals = [[1, 5], [2, 3], [4, 6], [7, 8], [8, 10], [12, 15]]

console.log(merge(intervals))