ブラウザのコンソールでrangeの作り方を試行錯誤してる記事を見つけました。
Array.from
あまり使ったことがなかったので、なるほどという感じです。
今回は、自分なりにrange関数を考えたいと思います。
動作確認はモダンブラウザ(Chrome49)及びnode5.9で行いました。
Array.from
さて、上記の記事にもある通り、まずはArray.from
を使ってみます。
Array.from() - JavaScript | MDN
をみると、Array.fromは任意で配列のすべての要素に対して呼び出されるMap関数を引数にとれます。
とゆうかMDNの例のなかに目当てのものがいますね。完。
// Generate a sequence of numbers
Array.from({length: 5}, (v, k) => k);
// [0, 1, 2, 3, 4]
とここで終わってもあれなのでもう少し見ていくことにします。
Array
仕様を確認したらnewをしなくてもコンストラクタが呼ばれて配列が返ります。
なので、下のように書けます。
Array.from(Array(5), (v, k) => k)
// [0, 1, 2, 3, 4 ]
{length: 5}
よりArray(5)
のほうが多少書きやすいですね。
Spread operator
雑に言うと、...
で配列を展開することができます。
これを使うと以下のように書くことができます。
[...Array(5)]
// [ undefined, undefined, undefined, undefined, undefined ]
[...Array(5).keys()]
// [ 0, 1, 2, 3, 4 ]
ずいぶんシンプルになりました。
まとめ
ブラウザでさくっと使うなら、var range = n => [...Array(n).keys()];
あたりでしょうか。
es6さまさまです。