表单里要提交多段时候,要磨练每段时候不能有相互重合的时候段
- 多段时候原始花样以下(时、分、秒转化为秒,或许时候戳):
var timeArray = [
{start:"27890",off:"28790"},
{start:"25530",off:"25556"},
{start:"27000",off:"31589"},
{start:"25550",off:"25560"},
]
1、数组比较法
1、将多段时候的最先时候和完毕时候离别构成两个数组
var minTimes = []
var maxTimes = []
timeArray.map((v)=>{
minTimes.push(v.start) //多段最先时候的数组 minTimes = ["27890", "25530", "27000", "25550"]
})
timeArray.map((v)=>{
maxTimes.push(v.off) //多段完毕时候的数组 maxTimes = ["28790", "25556", "31589", "25560"]
})
2、将minTimes和maxTimes数组元素离别从大到小排序
minTimes.sort() // minTimes = ["25530", "25550", "27000", "27890"]
maxTimes.sort() // maxTimes = ["25556", "25560", "28790", "31589"]
3、比较maxTimes[index]和minTimes[index+1],即看完毕时候是不是永久比最先时候小
- 从index=1最先比较,假如maxTimes[index]的值比minTimes[index+1]小,申明时候段不会重合,以此类推比较,假如没有涌现maxTimes[index] > minTimes[inex+1]的状况,则没有时候段发作重合,假如存在一次maxTimes[index] > minTimes[inex+1],则时候段重合
2、对象比较法
1、timeArray的每一项按最先时候从小到大排序
var temp
for(var i = 0; i < timeArray.length - 1; i++) {
for(var j = i + 1; j < timeArray.length; j++){
if(timeArray[i].start > timeArray[j].start){
temp = timeArray[i]
timeArray[i] = timeArray[j]
timeArray[j] = temp
}
}
} //timeArray = [
// {start: "25530", off: "25556"},
// {start: "25550", off: "25560"},
// {start: "27000", off: "31589"},
// {start: "27890", off: "28790"}
// ]
2、前一段的完毕时候与后一段的完毕时候比较,若后一段的完毕时候永久小于前一段的最先时候,则时候算段没有争执
for(var i = 0;i<timeArray.length-1;i++){
if(timeArray[i].off<timeArray[i+1].start){
console.log('success')
} else {
console.log(`the ${i+1} and ${i+2} rang is conflicting`)
}
}
总结
- 第一种要领是将时候段都拆分了,相当于将多段时候从小到大重新排序,然则没有很严谨的逻辑证实这类要领是准确的,但临时也想不出这类要领存在毛病的反例
- 第二种要领相当于把时候段根据最先时候重新排序,时候段并没有被拆分,假如时候段不争执,那末一定有每一段的前一段完毕时候小于当前段的最先时候,反之,假如当,每一段当前段的最先时候都小于前一段的完毕时候,则时候段不争执,是充足必要条件,所以我以为第二种要领有较严谨的逻辑性,可采用。
- 以上两种要领的条件是,保证每一段的完毕时候都要比最先时候大