5
3

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.

javascriptでワンライナーでArray shuffle (2016年版)

Last updated at Posted at 2016-08-26

小ネタ

たまに「じゃんけんする代わりぐらいなノリでワンライナーでシャッフルしたい!
rubyのshuffleぐらいなやつでやりたい!でも手元にはchromeぐらいしかない!」

という事があるが、ぐぐってみると思ったほど自分にヒットするやり方が載ってなかったのでメモる。


※ ワンライナーでやるためにsortを利用しているが、Array#sort実装のshuffleは偏る らしいので、
今回の方法はくじ引きの代わりぐらいに留めて、ちゃんとしたい場合はlodashなどのライブラリを利用するほうが良い。

やり方

["apple", "banana", "orange"].sort( () => Math.random() - 0.5)

// 一人だけ選びたいならこんな感じ
["apple", "banana", "orange"].sort( () => Math.random() - 0.5)[0]

// 複数人選びたいならこんな感じ
["apple", "banana", "orange"].sort( () => Math.random() - 0.5).splice(0,2)

sort時にMath.random()の返す乱数を元に true / falseをテキトーに返す。
Math.random()はseedを設定したり出来ないので、再現性があるようなコードではないので、production利用用途とかならもうちょっと別な手法のほうが良いだろう。

手元にIEしかない!という時はarrow functionやめればいける。

["apple", "banana", "orange"].sort( function(){ return Math.random() - 0.5 })

数列をshuffleしたいならこんな感じ。魔術感出てきた。

[...Array(3).keys()].sort( () => Math.random() - 0.5)

(参考: http://rochefort.hatenablog.com/entry/2015/01/08/005043)

5
3
0

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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?