На первой итерации i
равно 0 и, следовательно, d
также равно нулю, поэтому этот блок:
while (d !== 0 && d <= 4) {
d--;
if (arr2[i] === arr2[d]) {
i--;
}
i++;
}
}
не выполняется, так как d равно 0, поэтомуi
не увеличивается, и вы попадаете в бесконечный цикл.Вы на самом деле хотите всегда шагать по массиву:
while (i <= 4) { //Perform loop while i <= 4
arr2[i] = Math.random(1, 69);
d = i;
while (d !== 0 && d <= 4) {
d--;
if (arr2[i] === arr2[d]) {
i--;
}
}
i++; // <<<
}
Кроме того, Math.random()
не принимает никаких аргументов и возвращает число от 0 до 1, чтобы получить целое число в определенном диапазоневам придется использовать небольшую утилиту:
const random = (min, max) => min + Math.floor((max - min) * Math.random());
console.log(random(1, 69));
PS: Если честно, ваш код на самом деле довольно сложен для понимания, а комментарии не очень полезны.Вместо того, чтобы описывать код, попробуйте описать, чего вы пытаетесь достичь:
// Step through the array and fill it with random numbers
while (i <= 4) {
arr2[i] = random(0, 69);
d = i;
// Check all positions to the left if the number is already taken
while (d !== 0 && d <= 4) {
d--;
if (arr2[i] === arr2[d]) {
// If thats the case, stay at this position and genrate a new number
i--;
}
}
i++;
}
Как бы я написал это:
function lottoGen() {
const result = [];
for(let count = 0; count < 6; count++) {
let rand;
do {
rand = random(0, 69);
} while(result.includes(random))
result.push(rand);
}
return result;
}