在数组中循环和组合时间范围
Loop and Combine Time Ranges in an Array
我正在尝试读取一组对象(即 start/end 次)并合并其中的两个(或多个)时间(如果它们背靠背)。
即。第一个对象的结束时间与下一个对象的开始时间相同。如果是,请将它们合并。然后用数组中的下一个对象检查新组合的对象结束时间
这是一个简化的时间数组:
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;
});
}
注释使代码不言自明。
我正在尝试读取一组对象(即 start/end 次)并合并其中的两个(或多个)时间(如果它们背靠背)。
即。第一个对象的结束时间与下一个对象的开始时间相同。如果是,请将它们合并。然后用数组中的下一个对象检查新组合的对象结束时间
这是一个简化的时间数组:
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;
});
}
注释使代码不言自明。