Рандомные неповторяющиеся числа
Привет всем. Хоть убейте, ищу уже несколько дней.
Может подскажите, нужен генератор рандомных неповторяющихся чисел (например, от 0 до 100). |
var randomNumber = function() {
alert(Math.floor(Math.random()*101)) ;
} ;
randomNumber() ;
randomNumber() ;
randomNumber() ;
Не? |
Если нужен генератор рандомных, не повторяющихся чисел из заданного диапазона, то вот он:
function generateArrayRandomNumber (min, max) {
var totalNumbers = max - min + 1,
arrayTotalNumbers = [],
arrayRandomNumbers = [],
tempRandomNumber;
while (totalNumbers--) {
arrayTotalNumbers.push(totalNumbers + min);
}
while (arrayTotalNumbers.length) {
tempRandomNumber = Math.round(Math.random() * (arrayTotalNumbers.length - 1));
arrayRandomNumbers.push(arrayTotalNumbers[tempRandomNumber]);
arrayTotalNumbers.splice(tempRandomNumber, 1);
}
return arrayRandomNumbers;
}
// Нужно учесть что в диапазоне участвуют и минимальное и максимальное число
// тоесть если задать (0, 100) то на выходе получим массив из 101-го числа
// от 1 до 100 и плюс число 0
alert(generateArrayRandomNumber(45, 67));
P.S. Я этот генератор использовал для генерации плейлистов для онлайн проигрывателя. |
Цитата:
|
Цитата:
|
Цитата:
Рандомные и неповторяющиеся - два принципиально несовместимых требования. А если же вы хотите рандомную последовательность из 100 чисел, то это совсем другая задача |
Цитата:
|
Цитата:
|
Цитата:
по-моему, тут Цитата:
или же использовать объект, чтобы не splice'ить огромный массив. |
function inArray(arr, num){
for (var i = 0; i < arr.length; i++) {
if (num == arr[i]) return true;
};
return false;
}
function createRand(randLength, min, max){
var randArray = [],
i = 0;
if (randLength>(max-min+1)) {
return null;
}
while (i < randLength) {
var rand = Math.floor(Math.random() * (max - min + 1)) + min;
if (!(inArray(randArray,rand))){
i++;
randArray.unshift(rand);
}
};
return randArray;
}
использовать createRand(длина массива, минимальное, максимальное); |
| Часовой пояс GMT +3, время: 05:42. |