Buenas noches, Tengo una consulta sobre el código en el Juego Secreto 3 realizado en clase por el profesor. Mi duda es en la parte del for donde hace la comparación para que no hayan números repetidos en el array.
while(contador <= cantidad) {
numeroAleatorio = aleatorio();
console.log(numeroAleatorio);
var encontrado = false;
if(numeroAleatorio !== 0) {
for(var i = 0; i < secretosUno.length; i++) {
if(numeroAleatorio === secretosUno[i]) {
encontrado = true;
}
}
if(encontrado === false) {
secretosUno.push(numeroAleatorio);
contador++;
}
}
}
return secretosUno;
Cuándo dice if(numeroAleatorio === secretosUno[i]), el valor de secretosUno en el indice 0 (ya que i primero vale cero) va ser undefined porqué no hay ningún valor en esa posición. En la segunda iteración o recorrido, es decir, cuando i vale 1, el valor también sería undefined porqué no habría ningún valor en esa posición. El array solo tendría un valor que vendría a ser la posición de i cuando vale 0, y así sucesivamente por lo que la comparación para ver si no hay números repetidos estaría mal. Veamos un ejemplo del recorrido del for con valores supuestos:
// primera vuelta i = 0
numeroAleatorio = 3;
secretosUno[0] = undefined; // porqué no hay ningun elemento
numeroAleatorio == secretosUno[0] // el resultado aquí seria false
secretosUno = [3] // solo tiene un elemento qué seria igual decir secretosUno[0] = 3;
// segunda vuelta i =1
numeroAleatorio = 5;
secretosUno[1] = undefined; // porque en esa posición no hay ningún elemento
numeroAleatorio == secretosUno[1] // el resultado aquí seria false
secretosUno = [3, 5] // ahora el array tiene dos elementos, y sería igual decir secretosUno[0] = 0 y secretosUno[1] = 5
// tercera vuelta i = 2
numeroAleatorio = 6;
secretosUno[2] = undefined; //porque en esa posición no hay ningún elemento
numeroAleatorio == secretosUno[2] // el resultado aquí seria false
secretosUno = [3, 5, 6] // ahora el array tiene tres elementos, y sería igual decir secretosUno[0] = 0; secretosUno[1] = 5 y secretosUno[2] = 6
// cuarta vuelta i = 3
numeroAleatorio = 3; // como es aleatorio puede ser cualquier número, incluso uno igual a los anteriores.
secretosUno[3] = undefined; //porque en esa posición no hay ningún elemento
numeroAleatorio == secretosUno[3] // el resultado aquí seria false
secretosUno = [3, 5, 6, 3] // ahora el array tiene 4 elementos, y sería igual decir secretosUno[0] = 0; secretosUno[1] = 5; secretosUno[2] = 6 y secretosUno[3] = 3
Según la lógica que había entendido del recorrido del array, esa comparación para ver que no hayan repetidos estaría mal pero el programa si lo resuelve muy bien y arroja un array sin repetidos. Alguien me podría explicar como funciona el recorrido del array en ese caso? Derrepente me estoy confundiendo y enredándome yo solo. Gracias.