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

2votos

como hacer un numero de saltos especificos con el bucle for

tengo un problema, no puedo hacer saltos de dos en dos con mi array.

formateo = ["item", 20, "item", 25, "item", 25];

for(x=2; x<formateo.length; x++){console.log(formateo[x ++2]);} 

en sintesis quiero que devuelva esto

item 20
item 25
item 25
item 25

he probado tambien de esta forma, pero extranamente devuelve un loop infinito

for(x=0; x<formateo.length; x+2){console.log(formateo[x]);}

1 Respuesta

3votos

magarzon Puntos30650

Para empezar, como el índice de los arrays en javascript empiezan por 0, tus números están en los índices impares, por lo que la variable del bucle debe empezar con 1.

Y después, el operador de incremento, cuando es más de 1, se escribe así: x+=2.

El código que te funcionaría sería por tanto este:

for(x=1; x<formateo.length; x+=2){console.log(formateo[x]);}

2votos

steven comentado

hay un problema el bucle no imprime las cadenas y muestra solos los numeros
20
25
25
deberia de ser asi
item 20
item 25
item 25

2votos

magarzon comentado

Vale, perdona, pensé que solo querías los números, no leí bien tu pregunta.
Sería así entonces:

for(x=0; x<formateo.length; x+=2){console.log(formateo[x]+' '+formateo[x+1]);}

1voto

steven comentado

debo decirtelo tio, sos un master, te podra parecer tonto pero ya estaba pensando usar expresiones regulares para corregir ese problema, no entendi bien porque repites dos veces el array.
tengo una curiosidad, hubiese sido mas facil con otro ciclo por ej el while o el switch

3votos

magarzon comentado

Si re refieres a por qué uso formateo[x] y formateo[x+1] es porque el array se recorre de dos en dos, pero en cada iteración del bucle tienes que coger dos elementos, el item y el número.

Para que sea más gráfico, este sería tu array, con los índices:

0 item
1 20
2 item
3 25
4 item
5 25

El bucle empieza con 0, y aumenta de dos en dos, por lo que en cada iteracción los valores que va a tomar x serán 0, 2 y 4.

Si solo tomáramos esos valores de x (formateo[x]) obtendrías los valores en esas posiciones, que son los item. Por tanto, tienes que coger los valores en x y en x+1. Es decir, en cada iteración cogerías: 0 y 1, 2 y 3, 4 y 5.

En cuanto a los bucles, en este caso es más sencillo usar un for (switch por cierto no es una estructura de bucle)

1voto

steven comentado

entendi el concepto pero no me queda claro a donde va el primer formateo[x] porque como dices este deberia de recorrer todos los items del array entonces si eso lo combinamos con uno nuevo formateo[x+1] deberian de mostrarse todos juntos, nose me viene a la mente un recorrido de uno a uno y luego otro recorrido de dos en dos.

tengo todavia un ultimo problema, no se muestran todos los items cuando lo inserto en una seccion de mi pagina.

tengo una capa con el siguiente id lista-items


contenido = document.getElementbyId('lista-items');
for(x=0; x<formateo.length; x+=2){contenido.innerHTML = formateo[x]+' '+formateo[x+1];}

devuelve solo una linea item 25, las demas no se donde terminan

1voto

magarzon comentado

Cada vez que hay una iteración del bucle estás machacando el innerHTML de contenido.

Deberías guardar el resultado en una variable que actué de buffer y finalmente actualizar contenido:

var resultado = '';
contenido = document.getElementbyId('lista-items');
for(x=0; x<formateo.length; x+=2){resultado += formateo[x]+' '+formateo[x+1]+'<br>';}

contenido.innerHTML = resultado;

Fíjate que aquí lo que hago es ir añadiendo cada "fila" a la variable resultado (resultado +=) y que además añado un <br> al final de cada fila para que se muestre bien en el HTML.

Sería equivalente a esto, que a lo mejor lo ves más claro:

var resultado = '';
contenido = document.getElementbyId('lista-items');
for(x=0; x<formateo.length; x+=2){
   var item = formateo[x];
   var numero = formateo[x+1];
   var fila = item+' '+numero+'<br>';
   resultado = resultado + fila;
}

contenido.innerHTML = resultado;

1voto

steven comentado

gracias, funciona a la perfeccion aunque sinceramente no me esperaba tantas lineas de codigo para una simple cosa.
tengo una ultima consulta, mi pagina ahora puede mostrar los items con los valores y sumarlos todos, pero todavia me falta darle la posibilidad de poder remover los items y recalcular la suma.

array hace refencia a mi otro array formateo, como te decia estoy pensando anadir un boton justo al lado de cada item que pueda remover los items, pero el problema viene en la otra funcion, sera posible de calcular todo eso en tiempo real
es decir si en mi array formateo tengo los siguientes valores 10,15,20,25
es posible que cuando presione mi boton de remover item, automaticamente mi suma detecte el cambio y vuelva a calcular todo

//  function sumar() {
//         // var dato = document.getElementById('suma')
//
//      var totale = 0
//      var i
//      for (i=0; i<array.length; i++)
//      {     totale = totale + array[i]
//           console.log(totale)
//      }
//
//        // dato.innerHTML=totale
//
//
// }

var resultado ;

for(x=0; x<formateo.length; x+=2){
   var item = formateo[x];
   var numero = formateo[x+1];
   var fila = item+' '+'e'+numero+'.00'+'<br>';
   resultado = resultado + fila;
}

contenido.innerHTML = resultado;

1voto

Peter comentado

Por favor para consultas nuevas, abre preguntas nuevas y selecciona la respuesta como correcta.

Gracias.

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