В общем случае разрыв также будет диапазоном или набором диапазонов. Пример родителя: {1-10}, дети {1,2}, {5,8}, пробел {3,4}, {9,10}, поэтому я просто предлагаю вам написать вещь, которая может вычесть один диапазон от другого тогда примените это к родителю для каждого ребенка. Есть 3 случая, чтобы рассмотреть: это в начале, в середине (создание двух диапазонов) или в конце. Затем, когда вы вычитаете из набора диапазонов, вы должны учитывать все случаи, где может быть перекрытие.
, поэтому в javascript создайте объект диапазона с начальным и конечным свойством, а затем перенесите их в массив. Сделайте функцию rangeSub (parent, child), чтобы выполнить вычитание, где parent может быть массивом диапазонов, а child - единственным диапазоном.
rangeSub(parent, child) {
var result;
//code for set of range subtraction
if(parent.length)
for(range in parent) {
temp = rangeSub(range,child);
if(temp.length) result.concat(temp);
else result.push(temp);
}
return result;
}
//code for single range subtraction
if(parent.start < child.start) {
...
}
if(parent.end > child.end) {
...
}
etc.
}
Есть еще несколько крайних случаев, которые нужно решить, но это общая форма, которой я бы следовал.