初始化一个包含指定范围中数字的数组,包含 start
和end
,两个元素之间的比例是step
(后一个数是前一个数的step
倍)。 如果 step
等于 1
则返回一个错误。
使用Array.from()
,Math.log()
和 Math.floor()
来创建一个所需长度的数组,使用 Array.map()
来填充所需的值。 省略第二个参数 start
,使用默认值1
。 省略第三个参数 step
,使用默认值2
。
const geometricProgression = (end, start = 1, step = 2) => Array.from({ length: Math.floor(Math.log(end / start) / Math.log(step)) + 1 }).map( (v, i) => start * step ** i );
geometricProgression(256); // [1, 2, 4, 8, 16, 32, 64, 128, 256] geometricProgression(256, 3); // [3, 6, 12, 24, 48, 96, 192] geometricProgression(256, 1, 4); // [1, 4, 16, 64, 256]