Javascript 循环并组合数组中的时间范围

Javascript 循环并组合数组中的时间范围,javascript,arrays,momentjs,Javascript,Arrays,Momentjs,我试图读取一组对象(即开始/结束时间),并将其中的两个(或更多)时间(如果它们是背对背的)组合起来 即,第一个对象的结束时间与下一个对象的开始时间相同。如果是,则将其合并。然后用数组中的下一个对象检查新组合的对象结束时间 以下是一个简化的时间数组: var times = [ { start: 1, end: 2 },{ start: 2,

我试图读取一组对象(即开始/结束时间),并将其中的两个(或更多)时间(如果它们是背对背的)组合起来

即,第一个对象的结束时间与下一个对象的开始时间相同。如果是,则将其合并。然后用数组中的下一个对象检查新组合的对象结束时间

以下是一个简化的时间数组:

var times = [
             {
              start: 1, 
              end: 2
             },{
              start: 2, 
              end: 3
             },{
              start: 4, 
              end: 5
             },{
              start: 6, 
              end: 7
             },
            ]
我希望(或有一个diff数组)输出如下:

var newTimes = [
             {
              start: 1, 
              end: 3
             },{
              start: 4, 
              end: 5
             },{
              start: 6, 
              end: 7
             },
            ]
如果连续有3次,问题会变得更棘手

var threeTime = [
             {
              start: 1, 
              end: 2
             },{
              start: 2, 
              end: 3
             },{
              start: 3, 
              end: 5
             },{
              start: 6, 
              end: 7
             },
            ]
上述情况应转化为:

var newThreeTimes = [
             {
              start: 1,  
              end: 5
             },{
              start: 6, 
              end: 7
             },
            ]
原始时间数组将始终从最早(最小开始时间)到最新(最大开始时间)排序。输出不需要按任何特定顺序。所有时间对象都将是瞬间时间


有人能帮我解决这个问题吗?

这是我想出的代码

function mergeArr(arr) {

    // Sort the array in descending order
    arr.sort(function(a, b) {
        return b.start - a.start;
    });

    // Traverse from the top as you will need to remove the elements
    // Merge the elements based on start of one and end of the previous
    for (var i = arr.length - 1; i > 0; i--) {
        if (arr[i].end == arr[i - 1].start) {
            arr[i].end = arr[i - 1].end;
            arr.splice(i - 1, 1);
        }
    }

    // Sort it again in reverse order.
    return arr.sort(function(a, b) {
        return a.start - b.start;
    });
}
注释使代码不言自明