1, 2, 3, ...
みたいに連続する数字を使ってアルゴリズムを工夫したら、 for
文少なく書けますよね。
Ruby には Array(1..3)
のように、 ..
演算子を使うことで簡単に書けます。
JavaScript では簡単に書けないのでしょうか?
ES2015での記述を使います。
初級編: for
文を使う
素直な発想をすると、 for
文が理解しやすくて忘れません。
const seq = []
for (let i = 1; i <= 3; i++) {
seq.push(i)
}
console.log(seq) // [ 1, 2, 3 ]
中級編: function *
文を使う
async
/ await
がデファクトになって、ジェネレータ関数はあまり登場頂くことは少ないのですが、 for
文が登場するので分かりやすいですね。
const seq = [...(function * () {
for (let i = 1; i <= 3; i++) {
yield i
}
})()]
console.log(seq) // [ 1, 2, 3 ]
上級編: 空配列のインデックスを使う
配列を作成する Array(n)
コンストラクタを呼び出すと、配列の要素数が n
である空の配列を作成します。
console.log(Array(3)) // [ <3 empty items> ]
この空配列のインデックスを繰り返すと、良い感じで連続する数字が取得できます。
const seq = [...Array(3)].map((i, index) => index + 1)
console.log(seq) // [ 1, 2, 3 ]
または、 Array.prototype.keys()
を使う方法があります。
const seq = [...Array(3).keys()].map(i => i + 1)
console.log(seq) // [ 1, 2, 3 ]