如何分割一定范围
我需要从主范围分割范围。例如如何分割一定范围
var start = 0;
var end = 100;
var ranges = [
{ start: 25, end: 50 },
{ start: 60, end: 70 }
]
我的预期成果是,
{ start: 0, end: 24},
{ start: 51, end: 59},
{ start: 71, end: 100}
如何达致这?
这是简单的代码:
ranges.filter(function(item){return item.start>=start && item.end<=end})
只有当所有范围都在数组'范围内时,这才会起作用。与问题不同的是,全范围与子范围一起给出,这些子范围应该从这个完整范围中豁免。 –
我们可以通过去在每个范围,按压中间范围到结果阵列解决这个问题。下面确实允许的范围进行排序,则溶液,然而,免除范围不准:
- 有无重叠
- (现在固定代码)开始在整个范围的开始(例如没有免除范围可以在整个范围内的端部(例如,没有豁免的范围可以在100结束)
- 拥有整个范围之外的任何开始或结束的值从0开始)
- 结束。
要说明这些情况,您必须对我的代码进行扩展。如果你不知道如何,让我知道,我会帮助!
var start = 0;
var end = 100;
var ranges = [
{ start: 0, end: 5 },
{ start: 25, end: 50 },
{ start: 60, end: 70 }
]
// First sort the ranges based on the start
var sortedRanges = ranges.sort(function(a,b) {
\t return a.start - b.start;
});
var res = [];
// Push each of the intermediate ranges to the result array
for (var i = 0; i < ranges.length; i++) {
if (ranges[i].start == start) {
start = ranges[i].end+1;
continue;
}
res.push({
start: start,
end: ranges[i].start - 1
});
start = ranges[i].end+1;
}
// Push the final range to the resultArray
res.push({start: start, end: end});
console.log(res);
谢谢你,我已经试过这个...但是,如果range.start有0,它不会工作...我正在检查简化代码。 –
下一次当您对*提出问题时,请明确注意您已经尝试过的内容以及您遇到的困难。尽管如此,我已经更改了代码以包含从0开始的范围检查。 –
请因此我们你有什么到目前为止并解释任何条件,如当一个范围为始端之外会发生什么。或者如果范围总是按顺序。 –