我有一个[0; max]间隔,我想将其拆分为特定数量的子间隔。为此,我编写了一个名为getIntervalls(max, nbIntervals)的函数,其中max是我的第一个间隔中的最大元素,而nbIntervals是期望的子间隔数。

例如:

  • getIntervalls(3, 2)应该返回[[0,1], [2,3]]
  • getIntervalls(6, 2)应该返回[[0,3], [4,6]]
  • getIntervalls(8, 3)应该返回[[0,2], [3,5], [6,8]]
  • getIntervalls(9, 3)应该返回[[0,3], [4,7], [8,9]]

  • 这是我的功能:
    function getIntervalls(max, nbIntervalls) {
    
        var size = Math.ceil(max / nbIntervalls);
        var result = [];
    
        if (size > 1) {
          for (let i = 0; i < nbIntervalls; i++) {
            var inf = i + i * size;
            var sup = inf + size < max ? inf + size: max;
    
            result .push([inf, sup]);
          }
        } else {
          result.push([0, max]);
        }
    
        return result;
    }
    
    console.log(JSON.stringify(getIntervalls(7, 2)));
    

    它可以正常工作,并显示以下输出:
    [[0,4],[5,7]]
    

    当我将参数更改为7和3时,它显示:
    [[0,3],[4,7],[8,7]]
    

    代替
    [[0,2],[3,5],[6,7]]
    

    有人可以帮我吗?先感谢您。 ES6语法将不胜感激! :)

    最佳答案

    您可以检查第一个元素的i是否为零,以及下一个增量是否大于第二个元素的max。您也可以检查第一个元素是否小于最大元素。

    function getIntervalls(max, nInt) {
      const c = Math.floor(max / nInt);
      const r = [];
      for (var i = 0; i <= max; i += c) {
        const a = i == 0 ? i : i += 1;
        const b = i + c > max ? max : i + c;
        if (a < max) r.push([a, b])
      }
      return r;
    }
    
    console.log(JSON.stringify(getIntervalls(3, 2)));
    console.log(JSON.stringify(getIntervalls(6, 2)));
    console.log(JSON.stringify(getIntervalls(8, 3)));
    console.log(JSON.stringify(getIntervalls(9, 3)));
    console.log(JSON.stringify(getIntervalls(7, 2)));
    console.log(JSON.stringify(getIntervalls(7, 3)));

    07-26 03:45