99
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jsでrange関数をつくる

Last updated at Posted at 2016-03-25

ブラウザのコンソールでrangeの作り方を試行錯誤してる記事を見つけました。

飛び飛びArrayのイテレート - Qiita

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さまさまです。

99
54
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
99
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?