Czy pętla for może zwiększać / zmniejszać o więcej niż jeden?


119

Czy są inne sposoby na zwiększenie forpętli w JavaScript oprócz i++i ++i? Na przykład chcę zwiększyć o 3 zamiast o jeden.

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

4
Nie możesz po prostu podstawić i = i + 3 na trzeci argument? A może to tylko w Javie?
CptJesus,

1
Tak, to jest w porządku i++i ++idziałają tak, i+=1jakby były używane w deklaracji pętli for, więc i+=3zadziałałoby.
elclanrs

1
forPętla nie przyrost czegokolwiek. Twój kod użyty w forinstrukcji tak. Tylko od Ciebie zależy, jak / jeśli / gdzie / kiedy chcesz zmodyfikować ilub jakąkolwiek inną zmienną w tym zakresie.
I Hate Lazy

2
To nie jest pętla for, to nieskończona pętla. Masz na myśli i+=3.
ninjagecko

2
Rozumiem, że jest to proste pytanie z prostym rozwiązaniem, ale jaki jest powód głosów przeciw? Jestem prawie pewien, że to nie jest duplikat.
brentonstrine

Odpowiedzi:


254

Użyj += operatora przypisania :

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

Technicznie rzecz biorąc, możesz umieścić dowolne wyrażenie w końcowym wyrażeniu pętli for, ale zwykle jest ono używane do aktualizowania zmiennej licznika.

Aby uzyskać więcej informacji o każdym kroku pętli for, zapoznaj się z artykułem w MDN .


Dzięki za szczegóły - byłem prawie pewien, że jest sposób na umieszczenie bardziej zaawansowanych wyrażeń w trzecim slocie - właśnie zapomniałem, że musi zdefiniować zmienną, więc oczywiście i+3nie działa.
brentonstrine

@brentonstrine: Nie ma problemu, cieszę się, że mogłem pomóc
Andrew Whitaker

Jaka jest przyczyna nieskończonej pętli, kiedy to robimy i+3?
Sanjay Shr

1
@SanjayShr i+3nie zmienia wartościi
Nahid

@Nahid Tak, skomentowałem swoją odpowiedź. Thanx
Sanjay Shr

13

forPętli:

for(INIT; TEST; ADVANCE) {
    BODY
}

Oznacza co następuje:

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

Możesz napisać prawie każdy wyraz na INIT, TEST, ADVANCE, i BODY.

Zwróć uwagę, że ++operatory i warianty są operatorami z efektami ubocznymi (należy ich unikać, jeśli nie używasz ich w ten sposób i+=1i tym podobne):

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

Przykład:

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


5

Odpowiedź Andrew Whitakera jest prawdziwa, ale w każdej części możesz użyć dowolnego wyrażenia.
Pamiętaj tylko, że drugie (środkowe) wyrażenie powinno być obliczane, aby można je było porównać z wartością logiczną truelub false.

Kiedy używam forpętli , myślę o niej jako

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

jako istota

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

1

Z pewnością możesz. Inni słusznie wskazali, że musisz to zrobić i += 3. Nie możesz zrobić tego, co opublikowałeś, ponieważ wszystko, co tutaj robisz, to dodawanie, i + 3ale nigdy nie przypisywanie wyniku z powrotem i. i++jest tylko skrótem dla i = i + 1, podobnie i +=3jest skrótem dla i = i + 3.


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

dodatkowy

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

Ostatnia część operatora trójskładnikowego umożliwia określenie wielkości kroku przyrostu. Na przykład i ++ oznacza przyrost o 1. i + = 2 jest tym samym, co i = i + 2, ... itd. Przykład:

let val= [];

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


console.log(val);

Oczekiwane wyniki: „2,4,6,8”

„i” może być dowolną liczbą zmiennoprzecinkową lub całkowitą, w zależności od pożądanej wielkości kroku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.