Javascript 从给定范围中排除多个范围

Javascript 从给定范围中排除多个范围,javascript,Javascript,我有一个范围值为[1,35]的数组。然后在第二个数组中,我有其他范围,比如[2,5],[8,9],等等 现在我需要从第一个范围中减去这些范围,得到如下值 [1-1](取出2-5)然后下一步[6,7],然后[10,35] 所以基本上我想从第二个数组中获取范围,然后从第一个数组中删除它们 我如何才能做到这一点?您可以使用下面的ES6功能 它允许您在第一个参数中指定多个范围,并假设它没有重叠的范围。函数的返回值是基于第一个参数的数组,但第二个参数中指定的范围已从中删除。在此过程中,原始阵列不会发生变异

我有一个范围值为
[1,35]
的数组。然后在第二个数组中,我有其他范围,比如
[2,5],[8,9]
,等等

现在我需要从第一个范围中减去这些范围,得到如下值
[1-1]
(取出
2-5
)然后下一步
[6,7]
,然后
[10,35]

所以基本上我想从第二个数组中获取范围,然后从第一个数组中删除它们


我如何才能做到这一点?

您可以使用下面的ES6功能

它允许您在第一个参数中指定多个范围,并假设它没有重叠的范围。函数的返回值是基于第一个参数的数组,但第二个参数中指定的范围已从中删除。在此过程中,原始阵列不会发生变异:

函数范围(a、b){
//获取一个文件的深度副本并对其进行排序
a=a.map(x=>[…x]).sort((x,y)=>x[0]-y[0]);
//获取b的浅拷贝并对其进行排序
排序((x,y)=>x[0]-y[0]);
var c=[],i=0,j=0;
而(ix[0]){
c、 push([x[0],Math.min(y[0]-1,x[1]));
if(y[1]=x[1]){
i++;
}否则{
如果(y[1]>=x[0]){
x[0]=y[1]+1;
}
j++;
}
}
}
//添加a的剩余部分,然后返回
返回[…c,…a.slice(i)];
}
//样本输入
var a=[[1,35]];
var b=[[2,5],[8,9]];
//得到结果
var结果=减去范围(a、b)
//输出结果

log(JSON.stringify(result))您可以使用下面的ES6功能

它允许您在第一个参数中指定多个范围,并假设它没有重叠的范围。函数的返回值是基于第一个参数的数组,但第二个参数中指定的范围已从中删除。在此过程中,原始阵列不会发生变异:

函数范围(a、b){
//获取一个文件的深度副本并对其进行排序
a=a.map(x=>[…x]).sort((x,y)=>x[0]-y[0]);
//获取b的浅拷贝并对其进行排序
排序((x,y)=>x[0]-y[0]);
var c=[],i=0,j=0;
而(ix[0]){
c、 push([x[0],Math.min(y[0]-1,x[1]));
if(y[1]=x[1]){
i++;
}否则{
如果(y[1]>=x[0]){
x[0]=y[1]+1;
}
j++;
}
}
}
//添加a的剩余部分,然后返回
返回[…c,…a.slice(i)];
}
//样本输入
var a=[[1,35]];
var b=[[2,5],[8,9]];
//得到结果
var结果=减去范围(a、b)
//输出结果

log(JSON.stringify(result))您可以使用直接的方法检查每个零件范围的范围。它检查非/重叠部件的所有可能组合

此建议适用于未排序的数据


您可以使用直接的方法检查每个零件范围的范围。它检查非/重叠部件的所有可能组合

此建议适用于未排序的数据


问题是?问题是?那太完美了!!谢谢,太完美了!!谢谢
          ----------------                 [ 9, 24] given interval, denotes as r
  0000000001111111111222222222233333333334
  1234567890123456789012345678901234567890 interval result           rules                    return
1         ----------------                 [ 9, 24] none             i[0]===r[0]&&i[0]===r[0] none
2              -------                     [17, 23] [ 9, 16][24, 24] i[0]>r[0]&&i[1]<r[1]     [r[0],i[0]-1][i[1]+1,[r[1]]]
3                     ----------           [21, 30] [ 9, 20]         i[0]>r[0]&&i[0]<r[1]     [r[0],i[0]-1]
4     --------                             [ 5, 12] [13, 24]         i[1]>r[0]&&i[1]<r[1]     [i[1]+1,r[1]]
5 ----                                     [ 1,  4] [ 9, 24]         i[1]<r[0]                r
6                                 -----    [33, 37] [ 9, 24]         i[0]>r[1]                r