0

给定 2 个数组ab包含矩范围

const Moment = require('moment');
const MomentRange = require('moment-range');
const moment = MomentRange.extendMoment(Moment);

let a = [
    moment.range(moment('2020-01-01 09:00'), moment('2020-01-01 11:00')),
    moment.range(moment('2020-01-01 14:00'), moment('2020-01-01 18:00')),
    moment.range(moment('2020-01-01 20:00'), moment('2020-01-01 21:00')),
    moment.range(moment('2020-01-01 22:00'), moment('2020-01-01 23:00'))
];

let b = [
    moment.range(moment('2020-01-01 11:30'), moment('2020-01-01 13:00')),
    moment.range(moment('2020-01-01 17:00'), moment('2020-01-01 20:30')),
    moment.range(moment('2020-01-01 21:45'), moment('2020-01-01 23:15'))
];

我们如何计算一个包含在 中但不在 中c的矩范围的数组?ba

对于一个涉及aand的例子b,我们想要得到结果c,由下式给出

let c = [
    moment.range(moment('2020-01-01 11:30'), moment('2020-01-01 13:00')),
    moment.range(moment('2020-01-01 18:00'), moment('2020-01-01 20:00')),
    moment.range(moment('2020-01-01 21:45'), moment('2020-01-01 22:00')),
    moment.range(moment('2020-01-01 23:00'), moment('2020-01-01 23:15'))
];

使用节点 v14.2.0、2.27.0momentmoment-range4.0.2。


@Nikita-Iskorkin 运行你的代码

let c = [];
b.forEach(range => {
    if (!a.includes(range))
        c.push(range)
})

给出以下结果,c其中不排除/减去在 中找到的时间范围a

[
  t {
    start: Moment<2020-01-01T11:30:00-05:00>,
    end: Moment<2020-01-01T13:00:00-05:00>
  },
  t {
    start: Moment<2020-01-01T17:00:00-05:00>,
    end: Moment<2020-01-01T20:30:00-05:00>
  },
  t {
    start: Moment<2020-01-01T21:45:00-05:00>,
    end: Moment<2020-01-01T23:15:00-05:00>
  }
]

期望的结果c应该是:

[
  t {
    start: Moment<2020-01-01T11:30:00-05:00>,
    end: Moment<2020-01-01T13:00:00-05:00>
  },
  t {
    start: Moment<2020-01-01T18:00:00-05:00>,
    end: Moment<2020-01-01T20:00:00-05:00>
  },
  t {
    start: Moment<2020-01-01T21:45:00-05:00>,
    end: Moment<2020-01-01T22:00:00-05:00>
  },
  t {
    start: Moment<2020-01-01T23:00:00-05:00>,
    end: Moment<2020-01-01T23:15:00-05:00>
  }
4

1 回答 1

0

b只需检查范围不包含在数组中的数组的 forEach-loopa并将其推送到c

const Moment = require('moment');
const MomentRange = require('moment-range');
const moment = MomentRange.extendMoment(Moment);

let a = [
    moment.range(moment('2020-01-01 09:00'), moment('2020-01-01 11:00')),
    moment.range(moment('2020-01-01 14:00'), moment('2020-01-01 18:00')),
    moment.range(moment('2020-01-01 20:00'), moment('2020-01-01 21:00')),
    moment.range(moment('2020-01-01 22:00'), moment('2020-01-01 23:00'))
];

let b = [
    moment.range(moment('2020-01-01 11:30'), moment('2020-01-01 13:00')),
    moment.range(moment('2020-01-01 17:00'), moment('2020-01-01 20:30')),
    moment.range(moment('2020-01-01 21:45'), moment('2020-01-01 23:15'))
];

let c = [];

b.forEach(range => {
    if (!a.includes(range))
        c.push(range)
})
于 2020-06-26T06:39:49.920 回答