O laço for é um estrutura de repetição, ele ficará repetindo o código até a condição ser falsa. Que condição? A que estiver entre parênteses depois do "for ()". O que essa condição diz? for (var posicao = 0; posicao < segredos.length; posicao++) é tipo "para cada (posição iniciada em 0; enquanto a posição ser menor que o comprimento de segredos; vai somando a posição de um em um). Poxa, mas o que é length? É um método usado para pegar o comprimento de um array/lista, esse comprimento é o número de elementos dentro da lista. Então sabemos que a posição vai aumentar de um em um, e sabemos que o nome do nosso array é segredos, então para acessar os indices/elementos do array fazemos SE SEGREDOS NA POSIÇÃO TAL == numeroAleatorio, então essa parte compara o item no array com o numeroAleatorio, se ser igual, ele termina o laço antes de adicionar na lista, pois não queremos que os elementos dentro do array/lista se repita. Para mais informações tente pesquisar "Laço for com arrays/listas" no YouTube (é mais fácil entender uma estrutura vendo o comportamento do código na prática do que lendo a respeito).
<meta charset="UTF-8">
<input/>
<button>Compare com o meu segredo</button>
<script>
//Cria uma função que retorna um número aleatório
function sorteia() {
return Math.round(Math.random() * 10);
}
//Função que retornará "x" números aleatórios, recebe a quantidade como parâmetro
function sorteiaNumeros(quantidade) {
var segredos = []; //Cria um ARRAY vazio, podemos dizer que um array seria uma lista vazia, sem nenhum item
var numero = 1; //O laço abaixo vai iniciar a contagem com 1
while(numero <= quantidade) {
var numeroAleatorio = sorteia(); //Sorteia
var achou = false;
/*Não queremos adicionar o zero, portanto se número ser diferente
de zero.
*/
if (numeroAleatorio !== 0) {
for(var posicao = 0; posicao < segredos.length; posicao++) {
/*Lembra do nosso ARRAY? Este código vai varrer os items do array e se achar o mesmo
número terminará antes de adiciona-lo (com o break). No primeiro caso o array estará vazio
portanto segredos[posicao] != numeroAleatorio.*/
if(segredos[posicao] == numeroAleatorio){
achou = true;
break;
}
}
if (achou == false) {
/*Se o número aleatório ser diferente de zero e já não estiver no array, adiciona no array*/
segredos.push(numeroAleatorio);
numero++;
}
}
}
return segredos; //Retorna o array com os números aleatórios
}
var segredos = sorteiaNumeros(3); //Cria um array com três elementos de números aleatórios
console.log(segredos); //Exibe no console para teste do desenvolvedor
var input = document.querySelector("input");
input.focus();
function verifica() { //Varre o array verificando os elementos, comparando com o valor do input inserido
var achou = false;
for(var posicao = 0; posicao < segredos.length; posicao++) {
if(input.value == segredos[posicao]) {
alert("Você ACERTOU!");
achou = true;
break;
}
}
if(achou == false) {
alert("Você ERROU!");
}
input.value = "";
input.focus();
}
var button = document.querySelector("button");
button.onclick = verifica;
</script>