检查范围的集合是否在范围内,并覆盖另一个范围

时间:2020-05-28 16:10:59

标签: javascript range

我有一个由startend定义的范围,以及一个collection中的范围数组

var start = 10;
var end = 60;

var collection = [
    {start:5, end:15},
    {start:15, end:30},
    {start:45, end:60}
];

如何检查collection中的范围是否在startend之内并且覆盖了整个范围?

1 个答案:

答案 0 :(得分:0)

我通过以下方式找到了解决方案:

  • 将主要范围扩展为数字数组。
  • 循环集合,也将它们扩展为数字数组。
  • 检查数组是否在范围内,如果在范围内,请从主数组中删除这些数字,如果不返回false(要检查的数组不在范围内)
  • 循环后,检查主数组的长度,如果大于0,则返回false(数组集合在范围内,但不覆盖主范围)。如果为0,则表示收集数组在范围内,并覆盖整个主数组。

在谷歌搜索时,我发现使用了lodash。这是我函数中的代码:

let parentRange = _.range(start, end + 1); // Expand into array of numbers

for (var i = 0; i < collection.length; i++) {
    let rangeToCheck = _.range(collection[i].start, collection[i].end + 1); //Also expand into array of numbers
    if (_.difference(rangeToCheck, parentRange).length === 0) { // Check if collection range is within parent range
        _.pullAll(parentRange, rangeToCheck); // Remove the numbers from parent range that matches collcection range
    } else {
        return false; // Not within parent range
    }
}

// Check if parent range has values left
if (parentRange.length != 0) {
    return false; // Collection ranges does not cover parent range
} else {
    return true; // Collection ranges is within parent range, and cover the whole numbers
}
相关问题