Вот реализация получше, в O(n) операций вместо O(n^2):
/* Эта функция выбирает случайное размещение m чисел из набора 0, 1, ..., n-1 и возвращает его в виде массива.
Например: selectRandom(20, 8) -> [1,12,9,0,19,3,5,10] */
function selectRandom(n, m) {
var a=[], result=[];
for (var i=0; i<n; i++)
a.push(i);
for (i=n; i>n-m; i--) {
var c=Math.floor(Math.random()*i);
result.push(a[c]);
a[c]=a[i-1];
}
return result;
}