2012-10-09 13 views
65

Esistono altri modi per incrementare un ciclo for in Javascript oltre a i++ e ++i? Ad esempio, voglio incrementare di 3 invece di uno.Può un incremento/decremento del loop di più di uno?

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

Cant basta sostituire i = i + 3 per il terzo argomento? O è solo in Java? – CptJesus

+1

Sì, va bene 'i ++' e '++ i' sono come' i + = 1' se usato nella dichiarazione del ciclo for così 'i + = 3' funzionerebbe. – elclanrs

+1

Un ciclo 'for' non incrementa nulla. Il tuo codice usato nell'istruzione 'for' lo fa. Sta a te decidere come/se/dove/quando vuoi modificare 'i' o qualsiasi altra variabile. –

risposta

144

Utilizzare la +=assignment operator:

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

Tecnicamente, è possibile inserire qualsiasi espressione vuoi nell'espressione finale del ciclo for, ma è in genere utilizzato per aggiornare la variabile del contatore.

Per ulteriori informazioni su ciascun passo del ciclo for, check out the MDN article.

+0

Grazie per i dettagli - ero abbastanza sicuro che ci fosse un modo per inserire espressioni più avanzate nel terzo slot - avevo appena dimenticato che è necessario definire la variabile, quindi ovviamente 'i + 3' non funziona. – brentonstrine

+0

@brentonstrine: Nessun problema, felice di poter aiutare –

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

o 'for (var i = 0; i <10; i + = 2)', perché 'i = i + 2' è uguale a' i + = 2' – arximughal

7

A for ciclo:

for(INIT; TEST; ADVANCE) { 
    BODY 
} 

significa quanto segue:

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

Si può scrivere quasi ogni espressione per INIT, TEST, ADVANCE e BODY.

notano che la ++ operatori e le varianti sono operatori con effetti collaterali (uno dovrebbe cercare di evitarli se non li si utilizza come i+=1 e simili):

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

Esempio:

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

La risposta di Andrew Whitaker è vera, ma è possibile utilizzare qualsiasi espressione per qualsiasi parte.
Ricorda solo che la seconda espressione (centrale) deve essere valutata in modo che possa essere confrontata con un valore booleano true o false.

Quando uso una for loop, penso a come

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

come

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

È certamente possibile. Altri hanno sottolineato correttamente che è necessario fare i += 3. Non puoi fare ciò che hai postato perché tutto ciò che stai facendo qui è l'aggiunta di i + 3 ma non l'assegnazione del risultato a i. i++ è solo una scorciatoia per i = i + 1, allo stesso modo i +=3 è una scorciatoia per i = i + 3.

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

ulteriore

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 
Problemi correlati