Javascript 合并对象并返回压缩范围对象
我正在解决这个问题: 编写一个函数mergeRanges(),该函数占用一组会议时间 范围并返回压缩范围数组(1=30分钟) 我的解决办法如下: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
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 VracarWellr
是累加器,或者在本例中是它的数组,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);