Самый простой способ перебора - использовать выборку «принять / отклонить». Вы можете сделать что-то вроде этого:
uniqueRandomNumbers = function(n, nextRandom)
{
var nums = {}; var m = 0;
while(m < n)
{
var r = nextRandom();
if(! nums.hasOwnProperty(r))
{
nums[r] = true; m++;
}
}
return Object.keys(nums);
}
Здесь я использую тот факт, что объекты js реализованы в виде хэш-карт для получения хэш-набора. (Это имеет обратную сторону преобразования чисел в строки, но если вы не планируете немедленно выполнять арифметику с ними, это не проблема.)
Чтобы получить четыре уникальных целых числа от 0 до 9, вы можете сделать что-то вроде:
uniqueRandomNumbers(4, function() { return Math.floor(Math.random() * 10); })
Если вы хотите что-то немного лучше, чем грубая сила (что, вероятно, не относится к вашему варианту использования, но может помочь кому-то погуглить), один из вариантов - пройти через каждый элемент и либо взять, либо оставить его с соответствующей вероятностью. , Этот подход изложен в ответах на этот вопрос .