Aetae,
это понятно - ещёб я знал как это правильно назвать
так пойдёт?
основное каждый следующий неповторит предыдущий - цепочка бесконечна - нет лишних генераций -- все значения выпадают равномерно .
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
</head>
<body>
<script>
function rund(len, min) {
function shuffle(arr) {
for (var i = len = arr.length, elem; elem = arr[--i];) {
var num = Math.floor(Math.random() * len);
arr[i] = arr[num];
arr[num] = elem;
}
return arr
} //функция для перемешивания массива
var base = [], // основной массив
temp = [], // запасной массив
i ;
for (i = 0; i < len; i++) base[i] = i + min; // формирование значений основного массива[1, 2, 3, 4, 5]
shuffle(base); // первый раз перемешали основной массив [4, 3, 2, 1, 5]
return function () {
var elem = base.shift(); // берём первый элемент основного массива
temp.push(elem); //добавляем в запасной
1 == base.length && (shuffle(temp), base = base.concat(temp), temp = []);
// если в основном остался 1 элемент, перемешиваем запасной и добавляем к основному, очищаем запасной
return elem
}
};
var len = 5, // длина массива
min = 1, // значение 1 элемента массива
z = rund(len,min),
i;
for (i = 0; i < 40; i++) {
document.write(z()+' '); //для примера
}
</script>
</body>
</html>