我有一个[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)));