我需要從主範圍分割範圍。例如如何分割一定範圍
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}
如何達致這?
我需要從主範圍分割範圍。例如如何分割一定範圍
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})
只有當所有範圍都在數組'範圍內時,這纔會起作用。與問題不同的是,全範圍與子範圍一起給出,這些子範圍應該從這個完整範圍中豁免。 –
我們可以通過去在每個範圍,按壓中間範圍到結果陣列解決這個問題。下面確實允許的範圍進行排序,則溶液,然而,免除範圍不準:
要說明這些情況,您必須對我的代碼進行擴展。如果你不知道如何,讓我知道,我會幫助!
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,它不會工作...我正在檢查簡化代碼。 –
下一次當您對StackOverflow提出問題時,請明確注意您已經嘗試過的內容以及您遇到的困難。儘管如此,我已經更改了代碼以包含從0開始的範圍檢查。 –
請因此我們你有什麼到目前爲止並解釋任何條件,如當一個範圍爲始端之外會發生什麼。或者如果範圍總是按順序。 –