Skip to content

Instantly share code, notes, and snippets.

@masaquid
Created August 7, 2019 08:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masaquid/e256a5485181f1a270f82f155d3304a0 to your computer and use it in GitHub Desktop.
Save masaquid/e256a5485181f1a270f82f155d3304a0 to your computer and use it in GitHub Desktop.
Array.prototype.sample = function(n) {
return Array.from(this).sort(_ => Math.random() - 0.5).splice(0, n > this.length ? this.length : n||1)
}
let hoge = [1,2,3,4,5];
console.log(hoge.sample(3));
console.log(hoge.sample(6));
@masaquid
Copy link
Author

masaquid commented Aug 7, 2019

TwitterでJavascriptにrubyの.sampleって無いの?って話が出てたので書いてみました
やり始めたからには、ちゃんとした実装をしたかったが 本家rubyの.sampleとはだいぶ違うものに…

sampleメソッドは、配列の要素を1つランダムに返します。配列が空の場合はnilを返します。

引数に整数を指定すると、その数だけ要素をランダムに取り出し配列で返します。
要素の順番もランダムになります。
配列が空のとき、あるいは引数が0のときは空の配列[]を返します。
引数が配列のサイズより大きいときは、配列のサイズだけ要素を取り出します。

  • 配列が空の時の挙動を決める
  • sample() 引数無しで実行された時には整数で返したい
  • 現在のコードでは sample(0) の時に空の配列を返さない (1と同じ挙動)
  • 変数の偏りは一切考えていない

色々と修正できそうですが1行で実装するのは難しそうなので、ここで終わりにしました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment