非復元抽出 in Javascript
箱に入った N 個のくじから
ランダムで M 個のくじを取り出す。
意外と正しく書ける人少ないと思います。
全体をソートしたり、今までにでた乱数と比較して再抽選するのは、やばい頭悪い。
var choiceRandom = function(obj, m){ var k, n, i, key, tmp; var keys=Object.keys(obj); var dest=[]; for(k=0,n=keys.length; k<m && n>0; k++){ i = Math.random() * n | 0; key = keys[i]; dest.push(obj[key]); n--; tmp = keys[n]; keys[n] = key; keys[i] = tmp; } return dest; };