Olá, abri o código no meu Sublime e revisei, segue código corrigido funcionando.
<meta charset="utf-8">
<script>
var numeroSena = [];
var numerosErrados = [];
while (numeroSena.length < 6) {
if(numeroSena.length==0){
var numerosAleatorios = Math.round(Math.random() * 100);
if(numerosAleatorios <=60){
numeroSena.push(numerosAleatorios);
}else{continue;}
}else{
for(var i=0; i < numeroSena.length;i++){
var numerosAleatorios = Math.round(Math.random() * 100);
if(numerosAleatorios <=60 &&
numeroSena[i] != numerosAleatorios){
if(i+1 == numeroSena.length){
numeroSena.push(numerosAleatorios);
break;
}else{continue;}
}else{numerosErrados.push(numerosAleatorios);
break;
}
}
}
}
console.log("Números para a Sena " + numeroSena);
console.log("Números descartados " + numerosErrados);
</script>
Tive que fazer 2 correções. A primeira que era o motivo do código ficar em loop eterno era que nesse trecho do código antigo
for(var i=0; i < numeroSena.length;i++){
if(numerosAleatorios <=60 &&
numeroSena[i] != numerosAleatorios){
Ele não havia sorteado novamente o numerosAleatorios, por que agente só colocou o sorteio no if de quando o Array dos números sorteados tava vazio, ai depois que o Array recebia o primeiro elemento ele entrava no else e não tinha mais o sorteio do número ai eu adicionei ele aqui.
for(var i=0; i < numeroSena.length;i++){
var numerosAleatorios = Math.round(Math.random() * 100);
if(numerosAleatorios <=60 &&
numeroSena[i] != numerosAleatorios){
Ou seja dentro do for para ele poder sortear de novo caso de errado mas antes dele fazer as validações com o número sorteado.
A segunda correção foi algumas questões que eu não havia percebido a primeira vez que tentei lhe ajudar, eu devia ter aberto o código no sublime já desculpe.
Mas foi o seguinte nesse else aqui
}else{numerosErrados.push(numerosAleatorios);
continue;
}
Que ele cai quando o número sorteado deu errado, agente não pode dar o continue, por que se ele continuar a variável do for já não estará com o valor 0, e não vai olhar se o próximo número sorteado é igual aos primeiros números do Array dos número da Mega, ele vai olhar só a partir do valor que a variável do for estiver, e isso poderia fazer repetir números na sua Mega, ai eu substitui o continue por break, pra forçar ele a voltar pro while e ai quando cair no for a variável do for vem zerada de novo.
E a outra correção é que depois do numeroSena.push(numerosAleatorios); eu tenho que dar break, pois o push aumentou o length do Array e vai permitir o for rodar de novo e ter a chance de sortear mais do que 6 números, ai se eu forçar o break ali caso já tenha 6 números sorteados o while não vai passar e o loop é encerrado.
Desculpe ter passando instruções erradas, da próxima vez vou abrir o código no Sublime desde de o começo.
Att
Adriano Oliveira