Skip to content

Instantly share code, notes, and snippets.

@Arieg419
Created December 18, 2016 09:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Arieg419/211a6cad218761c4fd76f90b3f17f163 to your computer and use it in GitHub Desktop.
Save Arieg419/211a6cad218761c4fd76f90b3f17f163 to your computer and use it in GitHub Desktop.
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