HugoMatilla
12/12/2016 - 2:32 PM

JS Bin flat dates // source https://jsbin.com/vomave

JS Bin

flat dates

// source https://jsbin.com/vomave

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));
<!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>