Kann eine for-Schleife um mehr als eins erhöht / verringert werden?


118

Gibt es andere Möglichkeiten, a zu erhöhen? for neben i++und Schleife in Javascript zu erhöhen ++i? Zum Beispiel möchte ich um 3 statt um eins erhöhen.

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

4
Können Sie nicht einfach das dritte Argument durch i = i + 3 ersetzen? Oder ist das nur in Java?
CptJesus

1
Ja , das ist in Ordnung i++und ++isind wie i+=1wenn in der for - Schleife Deklaration so i+=3funktionieren würde.
Elclanrs

1
Eine forSchleife erhöht nichts. Ihr in der forAnweisung verwendeter Code funktioniert. Es liegt ganz bei Ihnen, wie / ob / wo / wann Sie ieine andere Variable ändern möchten .
Ich hasse faul

2
Das ist keine for-Schleife, es ist eine Endlosschleife. Du meinst i+=3.
Ninjagecko

2
Ich verstehe, dass dies eine einfache Frage mit einer einfachen Lösung ist, aber was ist der Grund für die Abstimmungen? Ich bin mir ziemlich sicher, dass es kein Duplikat ist.
Brentonstrine

Antworten:


252

Verwenden Sie den += Zuweisungsoperator :

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

Technisch gesehen können Sie einen beliebigen Ausdruck in den endgültigen Ausdruck der for-Schleife einfügen, dieser wird jedoch normalerweise zum Aktualisieren der Zählervariablen verwendet.

Weitere Informationen zu den einzelnen Schritten der for-Schleife finden Sie im MDN-Artikel .


Vielen Dank für die Details - ich war mir ziemlich sicher, dass es eine Möglichkeit gibt, erweiterte Ausdrücke in den dritten Steckplatz einzufügen - ich hatte gerade vergessen, dass die Variable definiert werden muss, also i+3funktioniert sie offensichtlich nicht.
Brentonstrine

@ Brentonstrine: Kein Problem, froh, dass ich helfen konnte
Andrew Whitaker

Was ist die Ursache für die Endlosschleife, wenn wir dies tun i+3?
Sanjay Shr

1
@ SanjayShr i+3ändert nicht den Wert voni
Nahid

@Nahid Ja, ich habe meine Antwort kommentiert. Thanx
Sanjay Shr

13

Eine forSchleife:

for(INIT; TEST; ADVANCE) {
    BODY
}

Bedeutet folgendes:

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

Sie können fast jeden Ausdruck schreiben für INIT, TEST, ADVANCE, undBODY .

Beachten Sie, dass die ++Operatoren und Varianten Operatoren mit Nebenwirkungen sind (man sollte versuchen, sie zu vermeiden, wenn Sie sie nicht wie i+=1und dergleichen verwenden):

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

Beispiel:

> 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
}​

oder for (var i = 0; i < 10; i+=2), weil i=i+2gleich isti+=2
arximughal

5

Andrew Whitakers Antwort ist wahr, aber Sie können jeden Ausdruck für jeden Teil verwenden.
Denken Sie daran, dass der zweite (mittlere) Ausdruck ausgewertet werden sollte, damit er mit einem Booleschen trueoder verglichen werden kannfalse .

Wenn ich eine forSchleife benutze , denke ich daran

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

als zu sein

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

1

Das kannst du sicher. Andere haben richtig darauf hingewiesen, dass Sie tun müssen i += 3. Sie können nicht das tun, was Sie gepostet haben, da Sie hier nur hinzufügen, i + 3aber das Ergebnis nie wieder zuweisen i. i++ist nur eine Abkürzung für i = i + 1, ähnlich i +=3ist eine Abkürzung für i = i + 3.


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

zusätzlich

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

Im letzten Teil des ternären Operators können Sie die Schrittgröße des Inkrements angeben. Zum Beispiel bedeutet i ++ ein Inkrementieren um 1. i + = 2 ist dasselbe wie i = i + 2, ... usw. Beispiel:

let val= [];

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


console.log(val);

Erwartete Ergebnisse: "2,4,6,8"

'i' kann abhängig von der gewünschten Schrittgröße ein beliebiges Gleitkomma oder eine ganze Zahl sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.