Рандомные неповторяющиеся числа
Привет всем. Хоть убейте, ищу уже несколько дней.
Может подскажите, нужен генератор рандомных неповторяющихся чисел (например, от 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, время: 07:40. |