¿Puede un bucle for aumentar / disminuir en más de uno?


119

¿Hay otras formas de incrementar un forbucle en Javascript además de i++y ++i? Por ejemplo, quiero incrementar en 3 en lugar de uno.

for (var i = 0; i < myVar.length; i+3) {
   //every three
}

4
¿No puedes simplemente sustituir i = i + 3 por el tercer argumento? ¿O es solo en Java?
CptJesus

1
Sí, está bien i++y ++ies como i+=1si se usara en la declaración de bucle for, por lo i+=3que funcionaría.
Elclanrs

1
Un forbucle no incrementa nada. Su código utilizado en la fordeclaración lo hace. Depende completamente de usted cómo / si / dónde / cuándo desea modificar io cualquier otra variable para el caso.
Odio la pereza

2
Eso no es un bucle for, es un bucle infinito. Te refieres i+=3.
ninjagecko

2
Entiendo que esta es una pregunta simple con una solución simple, pero ¿cuál es el motivo de los votos negativos? Estoy bastante seguro de que no es un duplicado.
brentonstrine

Respuestas:


253

Utilice el += operador de asignación :

for (var i = 0; i < myVar.length; i += 3) {

Técnicamente, puede colocar cualquier expresión que desee en la expresión final del bucle for, pero generalmente se usa para actualizar la variable de contador.

Para obtener más información sobre cada paso del ciclo for, consulte el artículo de MDN .


Gracias por los detalles, estaba bastante seguro de que había una manera de poner expresiones más avanzadas en el tercer espacio, acababa de olvidar que es necesario definir la variable, así que obviamente i+3no funciona.
brentonstrine

@brentonstrine: No hay problema, me alegro de poder ayudar
Andrew Whitaker

¿Cuál es la causa del bucle sin fin cuando lo hacemos i+3?
Sanjay Shr

1
@SanjayShr i+3no cambia el valor dei
Nahid

@Nahid Sí, comenté mi respuesta. Gracias
Sanjay Shr

13

Un forbucle:

for(INIT; TEST; ADVANCE) {
    BODY
}

Significa lo siguiente:

INIT;
while (true) {
    if (!TEST)
        break;
    BODY;
    ADVANCE;
}

Se puede escribir casi cualquier expresión para INIT, TEST, ADVANCE, y BODY.

Tenga en cuenta que los ++operadores y variantes son operadores con efectos secundarios (uno debe intentar evitarlos si no los está usando como i+=1y similares):

  • ++i medio i+=1; return i
  • i++ medio oldI=i; i+=1; return oldI

Ejemplo:

> i=0
> [i++, i, ++i, i, i--, i, --i, i]
[0, 1, 2, 2, 2, 1, 0, 0]

8
for (var i = 0; i < 10; i = i + 2) {
    // code here
}​

o for (var i = 0; i < 10; i+=2), porque i=i+2es igual ai+=2
arximughal

5

La respuesta de Andrew Whitaker es verdadera, pero puede usar cualquier expresión para cualquier parte.
Solo recuerde que la segunda expresión (en el medio) debe evaluarse para que pueda compararse con un booleano trueo false.

Cuando uso un forbucle , lo considero como

for (var i = 0; i < 10; ++i) {
    /* expression */
}

como siendo

var i = 0;
while( i < 10 ) {
    /* expression */
    ++i;
}

1

Ciertamente puedes. Otros han señalado correctamente lo que debe hacer i += 3. No puede hacer lo que ha publicado porque todo lo que está haciendo aquí es agregar i + 3pero nunca asignar el resultado a i. i++es solo una abreviatura de i = i + 1, igualmente i +=3es una abreviatura de i = i + 3.


1
for (var i = 0; i < myVar.length; i+=3) {
   //every three
}

adicional

Operator   Example    Same As
  ++       X ++        x = x + 1
  --       X --        x = x - 1
  +=       x += y      x = x + y
  -=       x -= y      x = x - y
  *=       x *= y      x = x * y
  /=       x /= y      x = x / y
  %=       x %= y      x = x % y

-1

La última parte del operador ternario le permite especificar el tamaño del paso de incremento. Por ejemplo, i ++ significa incremento en 1. i + = 2 es lo mismo que i = i + 2, ... etc. Ejemplo:

let val= [];

for (let i = 0; i < 9; i+=2) {
  val = val + i+",";
}


console.log(val);

Resultados esperados: "2,4,6,8"

'i' puede ser cualquier punto flotante o un número entero dependiendo del tamaño de paso deseado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.