関数として数列を定義して、その数列を配列として初期化したいときの効率的な書き方です。
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.map
や Array.forEach
同様配列のインデックスが渡るので、それを応用しました。