Skip to content

Instantly share code, notes, and snippets.

@masaquid masaquid/sample.js
Created Aug 7, 2019

Embed
What would you like to do?
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

This comment has been minimized.

Copy link
Owner Author

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
You can’t perform that action at this time.