Created
December 12, 2016 14:31
-
-
Save anonymous/d6162c782872751d737c90c4ce6f7fb9 to your computer and use it in GitHub Desktop.
JS Bin flat dates // source https://jsbin.com/vomave
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
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta name="description" content="flat dates"> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>JS Bin</title> | |
</head> | |
<body> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script> | |
<script>moment().format();</script> | |
<script id="jsbin-javascript"> | |
console.clear() | |
var dates = []; | |
dates.push({ start: 1, end: 3 }); //[{1,4},{5,6},{7,10},{11,15}] | |
dates.push({ start: 2, end: 4 }); | |
dates.push({ start: 5, end: 6 }); | |
dates.push({ start: 7, end: 9 }); | |
dates.push({ start: 7, end: 8 }); | |
dates.push({ start: 9, end: 10 }); | |
dates.push({ start: 11, end: 14 }); | |
dates.push({ start: 11, end: 11 }); | |
dates.push({ start: 11, end: 15 }) | |
dates.push({ start: 11, end: 12 }); | |
dates.push({ start: 16, end: 16 }); | |
dates.push({ start: 17, end: 18 }); | |
dates.push({ start: 19, end: 20 }); | |
console.log(Date()); | |
function flatEventsOrig(events) { | |
var start = events[0].start; | |
var end = events[0].end; | |
var res = []; | |
for (var i = 1; i < events.length; i++) { | |
var next = events[i]; | |
// Remove start == end | |
if (start == end) { | |
start = next.start; | |
end = next.end; | |
} else if (start < end) { | |
// Next empieza despues del inicio | |
if (start < next.start) { | |
// Next empieza despues del final | |
if (end < next.start) { | |
res.push({ start: start, end: end }); | |
console.log(`List: ${start}->${end}`); | |
start = next.start; | |
end = next.end; | |
// (end >= next.start). Next terminan igual o antes. Se solapan o superponen | |
} else { | |
// Next termnia despues. Se solapan. | |
if (end < next.end) { | |
start = start; | |
end = next.end; | |
// Next esta dentro | |
} else { | |
start = start; | |
end = end; | |
} | |
} | |
} else if (start == next.start) { | |
if (end < next.end) { // solapan | |
start = start; | |
end = next.end; | |
} else { // next esta dentro | |
start = start; | |
end = end; | |
} | |
} else { //start > next.start. No pasa porque estan ordenados | |
start = next.start; | |
end = next.end; | |
} | |
} else { | |
// Never happend. Estan ordenados. | |
} | |
} | |
console.log(`List: ${start}->${end}`); | |
res.push({ start: start, end: end }); | |
return res; | |
} | |
function flatEvents(events) { | |
var start = events[0].start; | |
var end = events[0].end; | |
var res = []; | |
for (var i = 1; i < events.length; i++) { | |
var next = events[i]; | |
// Remove start == end | |
if (start == end) { | |
start = next.start; | |
end = next.end; | |
} else if (start < end) { | |
// Next empieza despues del inicio | |
if (start < next.start) { | |
// Next empieza despues del final | |
if (end < next.start) { | |
res.push({ start: start, end: end }); | |
console.log(`List: ${start}->${end}`); | |
start = next.start; | |
end = next.end; | |
// (end >= next.start). Next terminan igual o antes. Se solapan o superponen | |
} else { | |
// Next termnia despues. Se solapan. | |
if (end < next.end) { | |
start = start; | |
end = next.end; | |
// Next esta dentro | |
} else { | |
start = start; | |
end = end; | |
} | |
} | |
} else if (start == next.start) { | |
if (end < next.end) { // solapan | |
start = start; | |
end = next.end; | |
} else { // next esta dentro | |
start = start; | |
end = end; | |
} | |
} else { //start > next.start. No pasa porque estan ordenados | |
start = next.start; | |
end = next.end; | |
} | |
} else { | |
// Never happend. Estan ordenados. | |
} | |
} | |
console.log(`List: ${start}->${end}`); | |
res.push({ start: start, end: end }); | |
return res; | |
} | |
console.log(Date()); | |
console.log(flatEvents(dates)); | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">console.clear() | |
var dates = []; | |
dates.push({ start: 1, end: 3 }); //[{1,4},{5,6},{7,10},{11,15}] | |
dates.push({ start: 2, end: 4 }); | |
dates.push({ start: 5, end: 6 }); | |
dates.push({ start: 7, end: 9 }); | |
dates.push({ start: 7, end: 8 }); | |
dates.push({ start: 9, end: 10 }); | |
dates.push({ start: 11, end: 14 }); | |
dates.push({ start: 11, end: 11 }); | |
dates.push({ start: 11, end: 15 }) | |
dates.push({ start: 11, end: 12 }); | |
dates.push({ start: 16, end: 16 }); | |
dates.push({ start: 17, end: 18 }); | |
dates.push({ start: 19, end: 20 }); | |
console.log(Date()); | |
function flatEventsOrig(events) { | |
var start = events[0].start; | |
var end = events[0].end; | |
var res = []; | |
for (var i = 1; i < events.length; i++) { | |
var next = events[i]; | |
// Remove start == end | |
if (start == end) { | |
start = next.start; | |
end = next.end; | |
} else if (start < end) { | |
// Next empieza despues del inicio | |
if (start < next.start) { | |
// Next empieza despues del final | |
if (end < next.start) { | |
res.push({ start: start, end: end }); | |
console.log(`List: ${start}->${end}`); | |
start = next.start; | |
end = next.end; | |
// (end >= next.start). Next terminan igual o antes. Se solapan o superponen | |
} else { | |
// Next termnia despues. Se solapan. | |
if (end < next.end) { | |
start = start; | |
end = next.end; | |
// Next esta dentro | |
} else { | |
start = start; | |
end = end; | |
} | |
} | |
} else if (start == next.start) { | |
if (end < next.end) { // solapan | |
start = start; | |
end = next.end; | |
} else { // next esta dentro | |
start = start; | |
end = end; | |
} | |
} else { //start > next.start. No pasa porque estan ordenados | |
start = next.start; | |
end = next.end; | |
} | |
} else { | |
// Never happend. Estan ordenados. | |
} | |
} | |
console.log(`List: ${start}->${end}`); | |
res.push({ start: start, end: end }); | |
return res; | |
} | |
function flatEvents(events) { | |
var start = events[0].start; | |
var end = events[0].end; | |
var res = []; | |
for (var i = 1; i < events.length; i++) { | |
var next = events[i]; | |
// Remove start == end | |
if (start == end) { | |
start = next.start; | |
end = next.end; | |
} else if (start < end) { | |
// Next empieza despues del inicio | |
if (start < next.start) { | |
// Next empieza despues del final | |
if (end < next.start) { | |
res.push({ start: start, end: end }); | |
console.log(`List: ${start}->${end}`); | |
start = next.start; | |
end = next.end; | |
// (end >= next.start). Next terminan igual o antes. Se solapan o superponen | |
} else { | |
// Next termnia despues. Se solapan. | |
if (end < next.end) { | |
start = start; | |
end = next.end; | |
// Next esta dentro | |
} else { | |
start = start; | |
end = end; | |
} | |
} | |
} else if (start == next.start) { | |
if (end < next.end) { // solapan | |
start = start; | |
end = next.end; | |
} else { // next esta dentro | |
start = start; | |
end = end; | |
} | |
} else { //start > next.start. No pasa porque estan ordenados | |
start = next.start; | |
end = next.end; | |
} | |
} else { | |
// Never happend. Estan ordenados. | |
} | |
} | |
console.log(`List: ${start}->${end}`); | |
res.push({ start: start, end: end }); | |
return res; | |
} | |
console.log(Date()); | |
console.log(flatEvents(dates));</script></body> | |
</html> |
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
console.clear() | |
var dates = []; | |
dates.push({ start: 1, end: 3 }); //[{1,4},{5,6},{7,10},{11,15}] | |
dates.push({ start: 2, end: 4 }); | |
dates.push({ start: 5, end: 6 }); | |
dates.push({ start: 7, end: 9 }); | |
dates.push({ start: 7, end: 8 }); | |
dates.push({ start: 9, end: 10 }); | |
dates.push({ start: 11, end: 14 }); | |
dates.push({ start: 11, end: 11 }); | |
dates.push({ start: 11, end: 15 }) | |
dates.push({ start: 11, end: 12 }); | |
dates.push({ start: 16, end: 16 }); | |
dates.push({ start: 17, end: 18 }); | |
dates.push({ start: 19, end: 20 }); | |
console.log(Date()); | |
function flatEventsOrig(events) { | |
var start = events[0].start; | |
var end = events[0].end; | |
var res = []; | |
for (var i = 1; i < events.length; i++) { | |
var next = events[i]; | |
// Remove start == end | |
if (start == end) { | |
start = next.start; | |
end = next.end; | |
} else if (start < end) { | |
// Next empieza despues del inicio | |
if (start < next.start) { | |
// Next empieza despues del final | |
if (end < next.start) { | |
res.push({ start: start, end: end }); | |
console.log(`List: ${start}->${end}`); | |
start = next.start; | |
end = next.end; | |
// (end >= next.start). Next terminan igual o antes. Se solapan o superponen | |
} else { | |
// Next termnia despues. Se solapan. | |
if (end < next.end) { | |
start = start; | |
end = next.end; | |
// Next esta dentro | |
} else { | |
start = start; | |
end = end; | |
} | |
} | |
} else if (start == next.start) { | |
if (end < next.end) { // solapan | |
start = start; | |
end = next.end; | |
} else { // next esta dentro | |
start = start; | |
end = end; | |
} | |
} else { //start > next.start. No pasa porque estan ordenados | |
start = next.start; | |
end = next.end; | |
} | |
} else { | |
// Never happend. Estan ordenados. | |
} | |
} | |
console.log(`List: ${start}->${end}`); | |
res.push({ start: start, end: end }); | |
return res; | |
} | |
function flatEvents(events) { | |
var start = events[0].start; | |
var end = events[0].end; | |
var res = []; | |
for (var i = 1; i < events.length; i++) { | |
var next = events[i]; | |
// Remove start == end | |
if (start == end) { | |
start = next.start; | |
end = next.end; | |
} else if (start < end) { | |
// Next empieza despues del inicio | |
if (start < next.start) { | |
// Next empieza despues del final | |
if (end < next.start) { | |
res.push({ start: start, end: end }); | |
console.log(`List: ${start}->${end}`); | |
start = next.start; | |
end = next.end; | |
// (end >= next.start). Next terminan igual o antes. Se solapan o superponen | |
} else { | |
// Next termnia despues. Se solapan. | |
if (end < next.end) { | |
start = start; | |
end = next.end; | |
// Next esta dentro | |
} else { | |
start = start; | |
end = end; | |
} | |
} | |
} else if (start == next.start) { | |
if (end < next.end) { // solapan | |
start = start; | |
end = next.end; | |
} else { // next esta dentro | |
start = start; | |
end = end; | |
} | |
} else { //start > next.start. No pasa porque estan ordenados | |
start = next.start; | |
end = next.end; | |
} | |
} else { | |
// Never happend. Estan ordenados. | |
} | |
} | |
console.log(`List: ${start}->${end}`); | |
res.push({ start: start, end: end }); | |
return res; | |
} | |
console.log(Date()); | |
console.log(flatEvents(dates)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment