0

我正在尝试使用非常复杂的数据结构做两件事。

对于以下结构:

[
  [
    { start: 2020-01-01T02:45:00.000Z, end: 2020-01-01T04:30:00.000Z },
    { start: 2020-01-01T00:15:00.000Z, end: 2020-01-01T02:00:00.000Z }
  ],
  [
    { start: 2020-01-01T04:15:00.000Z, end: 2020-01-01T04:30:00.000Z },
    { start: 2020-01-01T00:15:00.000Z, end: 2020-01-01T01:30:00.000Z },
    { start: 2020-01-01T02:00:00.000Z, end: 2020-01-01T03:30:00.000Z }
  ],
  [
    { start: 2020-01-01T02:00:00.000Z, end: 2020-01-01T03:30:00.000Z },
    { start: 2020-01-01T04:00:00.000Z, end: 2020-01-01T04:45:00.000Z },
    { start: 2020-01-01T00:45:00.000Z, end: 2020-01-01T01:15:00.000Z }
  ]
]

我想找到子数组中至少有两个元素的所有情况(即[0][0], [0][1], [0,3]在时间上相互重叠。例如,我们可以看到 [0][0][0] 和 [0][1][ 0]和[0][2][1]重叠。然后我想减少到相交时间,即04:00 - 04:30。但不在同一个数组内,只能在第二维上跨越三个。

到目前为止,我已经提出了这个算法,但它失败了:


function seekOverlaps(arr) {
  const overlapStore = [];
  const determineOverlaps = function () {
    for (let i = 0; i < arr.length; i++) {
      let running = arr.length - i;
      if (running === 1) {
        arr.shift();
        break;
      }
      overlapStore.push({
        intersection: [arr[0].intersect(arr[i + 1])],
      });
    }
    return arr;
  };
  while (arr.length > 1) {
    determineOverlaps(arr);
  }
  return overlapStore;
}

intersectMoment.js 范围在哪里..

4

0 回答 0