将一系列数字拆分为特定数量的间隔

Lai*_*iso 5 javascript algorithm ecmascript-6

我有一个间隔[0; max],我想将它分成特定数量的子间隔.为此,我编写了一个函数,名为getIntervalls(max, nbIntervals)where 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)));
Run Code Online (Sandbox Code Playgroud)

它工作正常,并显示此输出:

[[0,4],[5,7]]
Run Code Online (Sandbox Code Playgroud)

当我将参数更改为7和3时,它显示:

[[0,3],[4,7],[8,7]]
Run Code Online (Sandbox Code Playgroud)

代替

[[0,2],[3,5],[6,7]]
Run Code Online (Sandbox Code Playgroud)

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

Nen*_*car 3

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

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)));
Run Code Online (Sandbox Code Playgroud)