Merging meeting Times

by Vatsal Pande

JavaScript

( function () {
    function getCondensedRanges (array) {
        var condensedRanges = [];
        if(Array.isArray(array) && array.length >0) {
            if (array.length >1) {
                var startTimeMin = array[0].startTime;
                var endTimeMax = array[0].endTime;
                for(var i=1; i<array.length; i++) {
                    if (array[i].startTime-endTimeMax >1) {
                        condensedRanges.push({
                            startTime:startTimeMin,
                            endTime: endTimeMax
                        });
                        startTimeMin = array[i].startTime;
                        endTimeMax = array[i].endTime;
                    }else {
                        startTimeMin = Math.min (startTimeMin, array[i].startTime);
                        endTimeMax = Math.max (endTimeMax, array[i].endTime);

                        if (i === array.length-1 ){
                            condensedRanges.push({
                                startTime: startTimeMin,
                                endTime: endTimeMax
                            });
                        }
                    }
                }
            }else {
                condensedRanges.push(array[0]);
            }

        }
        return condensedRanges;
    }

    var meetings = [
        {startTime: 0,  endTime: 1},
        {startTime: 3,  endTime: 5},
        {startTime: 4,  endTime: 8},
        {startTime: 10, endTime: 12},
        {startTime: 9,  endTime: 10},
    ];
    var meetings_edgeCase1 = [{startTime: 1, endTime: 2}, {startTime: 2, endTime: 3}]
    var meetings_edgeCase2 =   [{startTime: 1, endTime: 5}, {startTime: 2, endTime: 3}];
    var meetings_edgeCase3 =   [
        {startTime: 1, endTime: 10},
        {startTime: 2, endTime: 6},
        {startTime: 3, endTime: 5},
        {startTime: 7, endTime: 9},
    ];
    var meetings_edgeCase4 =   [{startTime: 1, endTime: 3}, {startTime: 2, endTime: 4}];
    var...