JSFiddle - React, Tailwind, and code Playground

by kentaromiura

JavaScript

function zip(ranges){
    ranges.sort(function(a, b){
        if (a[0] < b[0]) return -1
        if (a[0] > b[0]) return 1
        return 0
    })
    return ranges.slice(1).reduce(function(prev, curr){
        var last = prev[prev.length-1];
        if (last[1] >= curr[0]){
            if(last[1] <= curr[1]){
                prev.splice(prev.length-1, 1, [last[0], curr[1]])
            }
        } else {
            prev.push(curr)
        }
        return prev
    }, [ranges[0]])
}

console.log(zip([[0,3], [1,2], [2,4], [5,6]]))
console.log(zip([[1,3], [3,4], [5,6], [6,7]]))
console.log(zip([[5,6], [6,7], [1,3], [3,4]]))