我有一个区间[0; max]
,我想把它分割成一定数量的子区间,为此,我写了一个函数getIntervalls(max, nbIntervals)
,其中max
是第一个区间中的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语法将会很感激!:)
4条答案
按热度按时间jk9hmnmh1#
您需要使用
Math.round()
来获取间隔size
的小数的最接近整数。此外,您需要将max
减1,以便计算size
,以考虑有效间隔数。下面是代码的修改:
请注意,它考虑了所需的间隔数,因此可能会导致一些数对的情况
[..., [n-2,n-1], [n,n]]
.希望这有帮助!
cygmwpex2#
您可以检查第一个元素的
i
是否为零,第二个元素的下一个增量是否大于最大值,也可以检查第一个元素是否小于最大值。mgdq6dx13#
您需要将大小计算从
Math.ceil()
更改为Math.floor()
,因为ceil
占用的大小比您需要的多1。我已经修改了你的代码,在这里它会工作.
希望这有帮助!
m4pnthwp4#
对我来说,这是一个完美的功能。
它可以让你得到两个数字之间的间隔,最后一个间隔总是达到最大值。