非復元抽出 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;
};