JS сравнивает, пересекаются ли несколько раз

фон

Сегодня я столкнулся с немного интересной проблемой. Позвольте мне записать ее. Конечно, это не очень сложное требование, а решение очень простое и грубое. Конечно, если у вас есть идеи получше, добро пожаловать в комментарии и обмен.

Предположим, у нас есть массив объектов, в котором хранится время, время начала и время окончания, как показано ниже.

  var arr  = [
   {
    
    
       start:"08:00",
       end:"08:30"
     },
      {
    
    
       start:"08:30",
       end:"09:00"
     },
      {
    
    
       start:"09:00",
       end:"09:30"
     }
   ];

Длина массива неизвестна, но время начала каждого элемента меньше или равно времени окончания. Нам нужно судить, есть ли пересечение времени в этом массиве?

Позвольте мне кратко рассказать о моих размышлениях, прежде всего о том, как судить о том, есть ли пересечение между двумя временами, и в каких ситуациях есть пересечение. Как показано ниже.
вставьте сюда описание изображения
Он, вероятно, включает в себя эти четыре ситуации. Тогда есть два случая, когда нет пересечения.
вставьте сюда описание изображения
Следовательно, мы можем получить пересечение, посчитав, что пересечения нет, и отрицая его. Код относительно прост в реализации, поэтому я пишу здесь немного.
Нам нужно только решить, что время окончания в первый раз меньше или равно времени начала во второй раз или время начала во второй раз больше или равно времени окончания в первый раз.

 checkTimes() {
    
    
  //简单点,双重循环,判断每一个时间和其他任意一个时间有没有交集
    for (let i = 0; i < this.arr.length; i++) {
    
    
      let start1 = new Date("2022-05-19 " + this.arr[i].start);
      let end1 = new Date("2022-05-19 " + this.arr[i].end);
      for (let j = i+1; j < this.arr.length; j++) {
    
    
        let start2 = new Date("2022-05-19 " + this.arr[j].start);
        let end2 = new Date("2022-05-19 " + this.arr[j].end);
        //交集判断情况较多,我们采用非交集取反的方式,
        //非交集有两种情况,12AB  AB12
        //即1结束时间小于等于2开始时间或者1开始时间大于等于2结束时间
        if (!(end1 <= start2 || start1 >= end2)) {
    
    
          return false;
        }
      }
    }
    return true;
  },

удачного дня.

Supongo que te gusta

Origin blog.csdn.net/u012869793/article/details/126508599
Recomendado
Clasificación