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