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 Puntos63580

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.

1voto

riccardo94 comentado

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

0voto

carlossevi comentado

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.

-1voto

riccardo94 comentado

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

0voto

carlossevi comentado

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

-1voto

riccardo94 comentado

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

0voto

carlossevi comentado

Lee mi respuesta original detenidamente, queda bastante claro.

-1voto

riccardo94 comentado

@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.

Otras Preguntas y Respuestas


...

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

Conecta