JS代码
/**
* 多区间判断
* @param area
* @returns {number} 错误类型(0正常 1区间重合 2最小值大于最大值 3区间没有连续)
*/
function checkIfArrayIntervalOverLap(area) {
let result = 0
let areaLength = area.length
if (areaLength > 0) {
let maxStartArr = []
let minEndArr = []
let minStart1 = 0
let minStart2 = 0
let maxEnd1 = 0
let maxEnd2 = 0
let secondResult = false
let seriesNumber = 0
let newMaxEnd = 0
for (let i = 0; i < areaLength; i++) {
minStart1 = area[i][0]
maxEnd1 = area[i][1]
secondResult = false
seriesNumber = 0
// 判断最小值是否大于最大值
if (minStart1 > maxEnd1 && maxEnd1 !== 0) {
result = 2
break;
}
for (let t = 0; t < areaLength; t++) {
minStart2 = area[t][0]
maxEnd2 = area[t][1]
if (i !== t) { // 不与自身比
maxStartArr = [minStart1, minStart2];// 开始课时数组
minEndArr = [maxEnd1, maxEnd2];// 结束课时数组
newMaxEnd = Number(maxEnd1 + 1);
// 判断数字是否连续
if (newMaxEnd === minStart2) {
seriesNumber = seriesNumber + 1;
}
// 判断是否有重合区间
if (Math.max(...maxStartArr) <= Math.min(...minEndArr)) {
secondResult = true
result = 1
break;
}
}
}
// 判断是否有重合区间返回结果
if (secondResult === true) {
break;
}
// 判断区间是否连续
if (seriesNumber !== 1 && i !== areaLength - 1) {
result = 3
break;
}
}
}
return result
}
二、实例
// 例子
const area = [[1,2],[4,10],[11,12]]
var result = checkIfArrayIntervalOverLap(area)
switch(result)
{
case 0:
document.write('数据正常')
break;
case 1:
document.write('区间重合')
break;
case 2:
document.write('最小值大于最大值')
break;
case 3:
document.write('区间没有连续')
break;
}