Created
December 18, 2016 09:22
-
-
Save Arieg419/211a6cad218761c4fd76f90b3f17f163 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function mergeRanges(meetings) { | |
// sort by start times, slice will return a shallow copy of the array, not affecting original array | |
var sortedMeetings = meetings.slice().sort(function(a, b) { | |
return a.startTime > b.startTime ? 1 : -1; | |
}); | |
// initialize mergedMeetings with the earliest meeting | |
var mergedMeetings = [sortedMeetings[0]]; | |
for (var i = 1; i < sortedMeetings.length; i++) { | |
var currentMeeting = sortedMeetings[i]; | |
var lastMergedMeeting = mergedMeetings[mergedMeetings.length - 1]; | |
// if the current and last meetings overlap, use the latest end time | |
// objects, and arrays (which are objects) all are passed by reference. thus change will be recorded. | |
if (currentMeeting.startTime <= lastMergedMeeting.endTime) { | |
lastMergedMeeting.endTime = Math.max(lastMergedMeeting.endTime, currentMeeting.endTime); | |
// add the current meeting since it doesn't overlap | |
} else { | |
mergedMeetings.push(currentMeeting); | |
} | |
} | |
return mergedMeetings; | |
} | |
meetings = [ | |
{startTime: 0, endTime: 1}, | |
{startTime: 3, endTime: 5}, | |
{startTime: 4, endTime: 8}, | |
{startTime: 10, endTime: 12}, | |
{startTime: 9, endTime: 10}, | |
]; | |
//var res = meetings.slice(); | |
var res = mergeRanges(meetings); | |
console.log(meetings); | |
console.log("break"); | |
console.log(res); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment