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

problema con funcion math

para este script estoy utilizando la famosa libreria math.js.
no entiendo porque me aparecen undefined si en mi condicion le digo explicitamente que no guarde ningun numero menor de 6 digitos
me aparecen mas numeros undefined que numeros de 6 digitos

codigos = []
            for(var x=0; x<100; x++){

                combo =  math.randomInt(999999)

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

                codigos.push(combo);

                document.getElementById('campo_codigos').innerHTML += codigos[x]+"<br>" 
                }

            }

1 Respuesta

2votos

carlossevi Puntos60950

El problema que tienes es que solo haces push en el array combo cuando se cumple tu condición, pero sin embargo la variable x se incrementa en todas las iteraciones del bucle.

Supongamos que empieza el bucle, se genera un número aleatorio:

x: 0
combo: 123456
codigos: [123456]
codigos[x] = codigos[0]: 123456

Si en la siguiente iteración el número es menor de 6 cifras:

x: 1
combo: 123
codigos: [123456]
codigos[x] = codigos[1]: ¡no definido!

En cuanto se te genera un número de menos de 6 cifras tienes un desajuste entre x y el número de elementos de codigos.

riccardo94 comentado Sep 5

hay algo curioso aqui, si reviso en mi array no hay ningun undefined y todos cumplen la condicion de ser numeros de 6 digitos, no entiendo porque razon me imprime en la pagina undefined si le digo bien claro que solo me imprima numero de 6 digitos,
disculpa por la duplicacion, presione por error otro boton

carlossevi comentado Sep 5

Revisa el ejemplo que te he puesto.

En el ejemplo el array no hay ningún undefined ([123456]) y sin embargo, codigos[1] sí que devuelve undefined porque la posición 1 no existe en el array.

Le estás mandado imprimir una posición del array que no existe.

riccardo94 comentado Sep 5

en mi pagina me imprime regular numeros indefinidos, sin embargo en mi array no hay ninguno y todos son de 6 digitos, no entiendo como esto es posible.

en mi condicion le digo que si el numero generado por la funcion mat no es de 6 digitos no me lo meta al array codigos, y por lo tanto deberia solo guardar en mi array codigos de 6 digitos e imprimirlos en la pagina, porque razon no pasa esto, disculpa, pero no logro entender

carlossevi comentado Sep 5

¿Sabes cómo funciona un array? ¿Entiendes que si un array solo tiene 4 elementos no puedes acceder a la posición 20?

riccardo94 comentado Sep 5

si pero no entiendo porque en mi array si resultan los 100 numeros de 6 digitos y en mi pagina no, he probado a reducir la cuenta y pasa lo mismo

        for(var x=0; x<50; 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>"

                    }

            }

        }

output en mi pagina
815997
204711
127529
920741
123032
367880
844115
291142
810228
823757
739670
935701
592678
424265
446035
105262
573472
943391
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined

carlossevi comentado Sep 5

Lee mi respuesta original detenidamente, queda bastante claro.

riccardo94 comentado Sep 5

@carlossevi si pero todavia no entiendo porque en mi array si estan todos los numeros y en mi pagina no

            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>"

                    }

            }

output

855412
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined
undefined

array

Array [ 855412, 889840, 343153, 878891, 154186, 318957, 232380, 712576, 958499, 290004, altri 2… ]

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

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

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

Conecta