【JavaScript】配列を任意の数列で初期化


関数として数列を定義して、その数列を配列として初期化したいときの効率的な書き方です。

function f(n) {
  return 2 ** (n + 1) - 1;
}

例として2のべき乗から1を引いたメルセンヌ数の数列を定義しました。

これをよくやる方法で初期化してみます。

new-array-1.js
function f(n) {
  return 2 ** (n + 1) - 1;
}

const a1 = new Array(10);
for (let n = 0; n < 10; n++) {
  a1[n] = f(n);
}

console.log(a1);
// => [1, 3, 7, 15, 31, 63, 127, 255, 511, 1023]

可読性は高いのでこれでもいいのですが、ワンライナーで書く方法を思いつきました。

new-array-2.js
function f(n) {
  return 2 ** (n + 1) - 1;
}

const a2 = Array.from(Array(10), (_, n) => f(n));
console.log(a2);
// => [1, 3, 7, 15, 31, 63, 127, 255, 511, 1023]

Array.from で渡す関数の第2引数には Array.mapArray.forEach 同様配列のインデックスが渡るので、それを応用しました。

参考