entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

Undefined en array

antes de todo pido disculpas al administrador si es que esta pregunta puede llegar a ser una duplicacion, sin embargo no es asi, necesito una explicacion porque por mas que me esfuerzo no entiendo porque pasa esto en mi siguiente codigo

<div id="output"></div>
<button onclick="combinare()">start</button>

   <script type="text/javascript">
function combinare() {
        // body...

        codici = [];

            for(var x=0; x<15; x++){

                /*combo =  math.randomInt(999999)*/
                combo =  Math.floor((Math.random() * 1000000) + 1);

                if(combo.toString().length == 6) {

                codici.push(combo);

                document.getElementById('output').innerHTML += codici[x] + "<br>"

                    }

            }

        }
</script>

al momento de invocar mi funcion, en mi pagina se imprime la siguiente lista de numeros

956720
172101
673672
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined

Sin embargo en mi array no hay ningun undefined, como es esto posible??

Array [ 956720, 172101, 673672, 333530, 852296, 306690, 364363, 113926, 699769, 185378, altri 4… ]

0voto

Peter comentado

Si no es repetida, puedes abrir 100 preguntas, pero por favor intenta utilizar títulos descriptivos. "Necesito ayuda", "Tengo un problema", "No se que pasa" y similares, no ayudan en nada a entender el problema al ver el título.

Saludos.

-1voto

riccardo94 comentado

tio pro favor explicame tu porque en mi array si tengo 15 numeros con 6 digitos y en mi pagina solo 5, porque esos 10 numeros de mi array no se imprimieron tambien en la pagina, despues de todo mi ciclo solo puede hacer 15 iteraciones para quitar la ipotesis de que si la funcion matematica no genera un numero de 6 digitos pierde una iteracion, estoy muy confundido, el otro tio que no recuerdo su nombre me intento explicar pero no le entendi bien, por favor ayudame a entender, gracias

2votos

carlossevi comentado

Efectivamente, es la misma pregunta exactamente que esta otra: https://entredesarrolladores.com/16572/problema-con-funcion-math

Me alegro de que esta vez alguien te haya hecho entender el problema del bucle y los índices del array.

1voto

magarzon comentado

No había visto la duplicada, si lo sé ni me molesto, porque le has dado casi exactamente la misma explicación y sigue sin pillarlo.

1 Respuesta

2votos

magarzon Puntos30650

Lo que te ha pasado es esto:

En la cuarta iteración (x = 3), ha salido un número que no tenía 6 dígitos, por lo que no los has añadido al array, pero has seguido aumentando el valor de x, y estás accediendo al valor del array por ese x, con lo que al final tienes:

x = 0, combo = 956720, tamaño de codici:1, sacas por pantalla: codici[0]=> 956720
x = 1, combo = 172101, tamaño de codici:2, sacas por pantalla: codici[1] => 172101
x = 2, combo = 673672, tamaño de codici:3, sacas por pantalla: codici[2] => 673672
x = 3, combo = ????, tamaño de codici:3, sacas por pantalla: codici[3] => undefined
x = 4, combo = 333530, tamaño de codici:4, sacas por pantalla: codici[4] => undefined
...

Espero que así de claro lo comprendas.
No sé si necesitas el array codici para algo, si no, con que simplemente uses el valor de combo a la hora de añadirlo al html, te vale. Si necesitas codici, con que aumentes el valor de x solo cuando se cumple la condición, también funcionaría (aunque es peligroso porque puedes entrar en un bucle infinito si cometes algún error)

0voto

magarzon comentado

He probado (cambiando a 5 iteraciones para no hacerlo largo) 3 veces, esto son los resultados (escribiendo console.log(codici)):
[798537, 346395, 486558]
[868407, 781395, 497953, 934230]
[921532, 280009, 815177, 132360, 128104]

Por supuesto, en la última iteración el array sí tenía 5 elementos, eso puede pasar

-1voto

riccardo94 comentado

verificaste que en pantalla te arroja numeros undefined y en el array son todos numeros de 6 digitos

-1voto

riccardo94 comentado

si pero eso no deberia pasar no crees tu

1voto

magarzon comentado

Sí, DEBE PASAR POR LO QUE YA TE HE EXPLICADO COMO 4 VECES.
Acabo de ejecutar de nuevo, y te explico con mi resultado lo que ha pasado.
Por pantalla ha salido esto:
564069
974343
undefined
undefined

Y haciendo un console.log(codici) AL FINAL DE LA EJECUCIÓN, sale esto:
[564069, 974343, 566677, 328016]

Qué ha pasado? Lo siguiente:
x = 0, combo = 564069, codici[564069], como cumple la condición, muestro por pantalla codici[x], es decir, codici[0] => 564069
x = 1, combo = 974343, codici[564069, 974343], como cumple la condición, muestro por pantalla codici[x], es decir, codici[1] => 974343
x = 2, combo = ??? no sabemos cuál, PORQUE NO SE MUESTRA POR PANTALLA, AL NO CUMPLIR LA CONDICIÓN. codici permanece inalterado, [564069, 974343]
x = 3, combo = 566677, codici = [564069, 974343, 566677]. Y como se cumple la condición, voy a sacar por pantalla codici[x], PERO COMO X = 3 Y EL ARRAY SOLO VA DE 0 A 2 EN ESTE MOMENTO, MUESTRO UNDEFINED
x = 4, combo = 328016, codici = [564069, 974343, 566677, 328016]. Y como se cumple la condición, voy a sacar por pantalla codici[x], Y PASA LO MISMO DE ANTES, VOY A INTENTAR MOSTRAR CODICI[4], PERO EL ARRAY SOLO TIENE DE 0 A 3, POR LO QUE VUELVO A MOSTRAR UNDEFINED

0voto

riccardo94 comentado

ahora si tiene mas sentido, gracias, lo que pasaba antes no se si fue error del navegador, era que si tenia 5 iteraciones, en pantalla devolvia 5 numeros, de los cual 2 eran undefined, y en mi array tambian habia 5 elementos, no me explicaba si en algun momento random se equivoco y no cumplio la condicion mi array deberia de tener 4, porque en una iteracion random no cumplio la condicion, sin embargo en mi array habian 5 elementos, y por pantalla 5 numeros, ahora ya no tengo ese error, si en pantalla tengo 5 numeros y 1 de ellos es undefined, en mi array tengo 4 elementos como deberia de ser, porque consumi 1 iteracion cuando random no cumplio la condicion

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta