連続する数字を配列に代入する方法 JavaScript版


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 ]