Un ciclo for può aumentare / diminuire di più di uno?


119

Ci sono altri modi per incrementare un forciclo in Javascript oltre a i++e ++i? Ad esempio, voglio incrementare di 3 invece di uno.

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

4
Non puoi semplicemente sostituire i = i + 3 per il terzo argomento? O è solo in Java?
CptJesus

1
Sì, va bene i++e ++isono come i+=1se fossero usati nella dichiarazione del ciclo for, quindi i+=3funzionerebbero.
elclanrs

1
Un forciclo non incrementa nulla. Il tuo codice utilizzato fornell'istruzione lo fa. Dipende interamente da te come / se / dove / quando vuoi modificare io qualsiasi altra variabile per quella materia.
I Hate Lazy

2
Non è un ciclo for, è un ciclo infinito. Intendi i+=3.
ninjagecko

2
Capisco che questa sia una domanda semplice con una soluzione semplice, ma qual è la ragione dei voti negativi? Sono abbastanza sicuro che non sia un duplicato.
brentonstrine

Risposte:


253

Utilizza l' += operatore di assegnazione :

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

Tecnicamente, puoi inserire qualsiasi espressione desideri nell'espressione finale del ciclo for, ma in genere viene utilizzata per aggiornare la variabile counter.

Per ulteriori informazioni su ogni passaggio del ciclo for, consulta l'articolo MDN .


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

@brentonstrine: Nessun problema, sono felice di aver potuto aiutare
Andrew Whitaker

Qual è la causa del ciclo infinito quando lo facciamo i+3?
Sanjay Shr

1
@SanjayShr i+3non modifica il valore dii
Nahid

@Nahid Sì, ho commentato la mia risposta. Grazie
Sanjay Shr

13

Un forciclo:

for(INIT; TEST; ADVANCE) {
    BODY
}

Significa quanto segue:

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

È possibile scrivere quasi ogni espressione per INIT, TEST, ADVANCE, e BODY.

Nota che gli ++operatori e le varianti sono operatori con effetti collaterali (dovresti cercare di evitarli se non li stai usando come i+=1e simili):

  • ++i si intende i+=1; return i
  • i++ si intende 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]

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

oppure for (var i = 0; i < 10; i+=2), perché i=i+2è uguale ai+=2
arximughal

5

La risposta di Andrew Whitaker è vera, ma puoi usare qualsiasi espressione per qualsiasi parte.
Ricorda solo che la seconda espressione (centrale) dovrebbe essere valutata in modo che possa essere paragonata a un booleano trueo false.

Quando uso un forloop , lo penso come

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

come essere

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

1

Certamente puoi. Altri hanno sottolineato correttamente che devi fare i += 3. Non puoi fare ciò che hai pubblicato perché tutto ciò che stai facendo qui è aggiungere i + 3ma non assegnare mai il risultato i. i++è solo una scorciatoia per i = i + 1, allo stesso modo i +=3è una scorciatoia per i = i + 3.


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

addizionale

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

L'ultima parte dell'operatore ternario consente di specificare la dimensione del passo di incremento. Ad esempio, i ++ significa incremento di 1. i + = 2 è uguale a i = i + 2, ... ecc. Esempio:

let val= [];

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


console.log(val);

Risultati attesi: "2,4,6,8"

"i" può essere un qualsiasi numero in virgola mobile o intero a seconda della dimensione del passo desiderata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.