Skip to content

Instantly share code, notes, and snippets.

@HugoMatilla
Forked from anonymous/index.html
Created December 12, 2016 14:32
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 HugoMatilla/3a120bc7fc808f00a42fb4499ebcd885 to your computer and use it in GitHub Desktop.
Save HugoMatilla/3a120bc7fc808f00a42fb4499ebcd885 to your computer and use it in GitHub Desktop.
JS Bin flat dates // source https://jsbin.com/vomave
<!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>
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