Dra*_*vic 2 javascript arrays object
我发现了类似的问题,但批准的答案不适用于我的问题。
我有一个输入:范围对象数组,每个对象包含:
start:整数,范围开始,end:整数,范围结束。输出应该是:
一个非重叠范围对象的数组,覆盖与输入相同的范围,从最小开始到最大开始排序。如果满足以下条件,则两个范围不重叠:
range1.start <= range2.start, 和range1.end >= range2.start输入:
[
{ start: 8, end: 10 },
{ start: 5, end: 7 },
{ start: 9, end: 12 },
{ start: 2, end: 6 },
]
Run Code Online (Sandbox Code Playgroud)
输出:
[
{ start: 2, end: 7 },
{ start: 8, end: 12 }
]
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,我尝试在网络上应用解决方案来合并重叠间隔,但它们不起作用。
谢谢。
start您可以按和对数组进行排序,end并迭代排序后的数组,检查范围是否重叠。
var data = [{ start: 8, end: 10 }, { start: 5, end: 7 }, { start: 9, end: 12 }, { start: 2, end: 6 }],
result = data
.sort(function (a, b) { return a.start - b.start || a.end - b.end; })
.reduce(function (r, a) {
var last = r[r.length - 1] || [];
if (last.start <= a.start && a.start <= last.end) {
if (last.end < a.end) {
last.end = a.end;
}
return r;
}
return r.concat(a);
}, []);
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)