geometricProgression - 创建一个指定范围的数字数组,后一个数是前一个数的 N 倍

优质
小牛编辑
132浏览
2023-12-01

初始化一个包含指定范围中数字的数组,包含 startend,两个元素之间的比例是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]