js校验多段时候不重合

表单里要提交多段时候,要磨练每段时候不能有相互重合的时候段

  • 多段时候原始花样以下(时、分、秒转化为秒,或许时候戳):
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`)
     }
  }

总结

  • 第一种要领是将时候段都拆分了,相当于将多段时候从小到大重新排序,然则没有很严谨的逻辑证实这类要领是准确的,但临时也想不出这类要领存在毛病的反例
  • 第二种要领相当于把时候段根据最先时候重新排序,时候段并没有被拆分,假如时候段不争执,那末一定有每一段的前一段完毕时候小于当前段的最先时候,反之,假如当,每一段当前段的最先时候都小于前一段的完毕时候,则时候段不争执,是充足必要条件,所以我以为第二种要领有较严谨的逻辑性,可采用。
  • 以上两种要领的条件是,保证每一段的完毕时候都要比最先时候大
    原文作者:大笨钟的W
    原文地址: https://segmentfault.com/a/1190000018736864
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞