Javascript 合并对象并返回压缩范围对象

Javascript 合并对象并返回压缩范围对象,javascript,javascript-objects,Javascript,Javascript Objects,我正在解决这个问题: 编写一个函数mergeRanges(),该函数占用一组会议时间 范围并返回压缩范围数组(1=30分钟) 我的解决办法如下: var arr = [ {startTime: 0, endTime: 1}, {startTime: 3, endTime: 5}, {startTime: 4, endTime: 8}, {startTime: 10, endTime: 12}, {startTime: 9, endTime: 1

我正在解决这个问题:

编写一个函数mergeRanges(),该函数占用一组会议时间 范围并返回压缩范围数组(1=30分钟)

我的解决办法如下:

var arr =   [
    {startTime: 0,  endTime: 1},
    {startTime: 3,  endTime: 5},
    {startTime: 4,  endTime: 8},
    {startTime: 10, endTime: 12},
    {startTime: 9,  endTime: 10},
];

function result(arr){
  var finalResult = {};

  var c = arr.sort(function(a,b){ //First Sort
    return a.startTime - b.startTime;
  });

  var d = c.reduce(function(a,b){

   //Logic

   //check to see if start time lies between a[start] < b[startTime] < a[end]

    // If the startTime lies between a[startTime] to b[endTime] -> Merge them.

// if(a[startTime]< b[startTime] < b[endTime]){ //if start time lies between start and end.
    //   a[endTime] = b[endTime];
    //   delete b;
    // }

  });

}

result(arr);
var-arr=[
{开始时间:0,结束时间:1},
{开始时间:3,结束时间:5},
{开始时间:4,结束时间:8},
{开始时间:10,结束时间:12},
{开始时间:9,结束时间:10},
];
功能结果(arr){
var finalResult={};
var c=arr.sort(函数(a,b){//First sort
返回a.startTime-b.startTime;
});
var d=c.reduce(函数(a,b){
//逻辑
//检查开始时间是否介于a[开始]合并它们。
//if(a[startTime]
我无法理解如何使用reduce函数交换逻辑。有人能告诉我吗?

您可以使用
reduce()
和一个变量来存储endTime

var输入=[
{开始时间:0,结束时间:1},
{开始时间:3,结束时间:5},
{开始时间:4,结束时间:8},
{开始时间:10,结束时间:12},
{开始时间:9,结束时间:10},
]
var c=0;
var结果=输入.reduce(函数(r,e,i){
//检查循环中当前对象的c是否<开始时间,或者它的第一个
//元素,如果是,则将其添加到r
if(cc
//(所以最后一个对象的endTime小于前一个endTime时,您不会遇到问题)并对其进行更改
//在您添加的最后一个元素的r中
如果(e.endTime>c)r[r.length-1].endTime=e.endTime
}
//始终将c设置为当前结束时间
c=e.endTime
返回r
}, [])

console.log(result)
您所说的“交换逻辑”是什么意思?r、e和i是什么?(我是索引吗?)?你能解释一下你的逻辑吗?我对你的解决办法感到困惑。(很抱歉,我是这个reduce函数的新手。.最近开始学习)@Nenad VracarWell
r
是累加器,或者在本例中是它的数组,
e
是循环中的当前对象,
i
是索引,您只需检查它的第一个元素,就可以将它添加到数组中。
var arr =   [
    {startTime: 0,  endTime: 1},
    {startTime: 3,  endTime: 5},
    {startTime: 4,  endTime: 8},
    {startTime: 10, endTime: 12},
    {startTime: 9,  endTime: 10},
];

function result(arr){
  var finalResult = {};

  var c = arr.sort(function(a,b){ //First Sort
    return a.startTime - b.startTime;
  });

  var d = c.reduce(function(a,b){

   //Logic

   //check to see if start time lies between a[start] < b[startTime] < a[end]

    // If the startTime lies between a[startTime] to b[endTime] -> Merge them.

// if(a[startTime]< b[startTime] < b[endTime]){ //if start time lies between start and end.
    //   a[endTime] = b[endTime];
    //   delete b;
    // }

  });

}

result(arr);