如图,每一行就是一个区间,行数不确定
判断用户输入的区间不重复才能提交成功,不填就是默认的最大和最小
可以选择包含或不包含对应的值,想得头都大了(T_T)
如图,每一行就是一个区间,行数不确定
判断用户输入的区间不重复才能提交成功,不填就是默认的最大和最小
可以选择包含或不包含对应的值,想得头都大了(T_T)
var source = [
{
min: {include: false, value: 10},
max: {include: true, value: 20}
},
...
]
类似这样的数据结构,再判断一下是否重复就行吧。
挨个从
source
中进行判断,相当于判断两条线段是否重复了。比如两条线段A、B。如果A.max <(=) B.min || A.min >(=) B.max
。则这两条线就是不重复的。
看了一下是不是可以用一个二维数组解决:
(function(arr){
for(let i=0;i<arr.length;i++){
if(arr[i][0] > arr[i][1]) return false;
if(arr[i+1] && arr[i][1] > arr[i+1][0]) return false;
}
return true;
})([[1,2],[3,4],[7,9]])
这个函数执行结果就是根据是否有重复的区间,如果有就返回false如果没有就返回ture。
至于包含不包含,就在于你如何初始化这个二维数组了。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
不给出代码,不知道你的数据是什么结构的,不过没事,你看我下面的代码吧!
下面准备些测试数据
测试通过,可能看到函数会有疑问,为什么数组要排序,其实看下面实例。
这个数据,区间范围也没有交叉,只是反过来写了,所以,为了避免这个情况,所以就要先对数组进行排序
看玩应该都懂了,我这里模拟的数据,数组的每一个对象,其实就等同于你的每一行的数据。
细节优化
当然如果想首尾相连,或者区间的最大值不能大于默认的最大值,区间的最小值也不能小于默认的最小值,只需要多判断几次!下面看代码吧,容易理解些
至于你说的包含情况,我改了下,代码如下,看着就懂了