Bir for döngüsü birden fazla artırabilir / azaltabilir mi?


119

Bir artırmak için orada başka yolları var foryanında JavaScript döngü i++ve ++i? Örneğin, bir yerine 3 artırmak istiyorum.

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

4
Üçüncü argüman için i = i + 3'ü koyamaz mısınız? Yoksa bu sadece Java'da mı?
CptJesus

1
Evet bu iyi i++ve ++igibidir i+=1döngü beyanı için kullanılan eğer öyleyse i+=3çalışacak.
elclanrs

1
Bir fordöngü değil artım şey yapmıyor. İfadede kullanılan kodunuz forvar. Nasıl / eğer / nerede / ne zaman değiştirmek istediğinizi iveya bu konudaki diğer herhangi bir değişkeni tamamen size bağlıdır .
I Hate Lazy

2
Bu bir for döngüsü değil, sonsuz bir döngüdür. Yani i+=3.
ninjagecko

2
Bunun basit bir çözüme sahip basit bir soru olduğunu anlıyorum, ancak olumsuz oyların nedeni nedir? Bir kopya olmadığından oldukça eminim.
brentonstrine

Yanıtlar:


254

+= Atama operatörünü kullanın :

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

Teknik olarak, istediğiniz herhangi bir ifadeyi for döngüsünün son ifadesine yerleştirebilirsiniz, ancak bu genellikle sayaç değişkenini güncellemek için kullanılır.

For döngüsünün her adımı hakkında daha fazla bilgi için MDN makalesine bakın .


Ayrıntılar için teşekkürler - üçüncü yuvaya daha gelişmiş ifadeler koymanın bir yolu olduğundan oldukça emindim - değişkeni tanımlaması gerektiğini unutmuştum, bu yüzden açıkçası i+3işe yaramıyor.
brentonstrine

@brentonstrine: Sorun değil, yardımcı olabildiğime sevindim
Andrew Whitaker

Yaptığımız zaman sonsuz döngünün nedeni nedir i+3?
Sanjay Shr

1
@SanjayShr i+3değerini değiştirmezi
Nahid

@Nahid Evet, cevabımı yorumladım. Thanx
Sanjay Shr

13

Bir fordöngü:

for(INIT; TEST; ADVANCE) {
    BODY
}

Aşağıdakileri ifade eder:

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

Sen için hemen her ifadeyi yazabilirsiniz INIT, TEST, ADVANCE, ve BODY.

++Operatörlerin ve varyantların yan etkilere sahip operatörler olduğuna dikkat edin (bunları beğenmiyorsanız bunlardan kaçınmaya çalışın i+=1):

  • ++i anlamına geliyor i+=1; return i
  • i++ anlamına geliyor oldI=i; i+=1; return oldI

Misal:

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

veya for (var i = 0; i < 10; i+=2)çünkü i=i+2eşittiri+=2
arximughal

5

Andrew Whitaker'ın cevabı doğru, ancak herhangi bir kısım için herhangi bir ifadeyi kullanabilirsiniz.
İkinci (ortadaki) ifadenin bir boolean trueveya ile karşılaştırılabilmesi için değerlendirilmesi gerektiğini unutmayın false.

Bir fordöngü kullandığımda , bunu şöyle düşünüyorum

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

olduğu gibi

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

1

Kesinlikle yapabilirsin. Diğerleri doğru bir şekilde yapmanız gerektiğini belirtti i += 3. Gönderdiklerinizi yapamazsınız çünkü burada yaptığınız tek şey eklemek i + 3ama sonucu asla geri atamamaktır i. i++için bir kısaltmadır i = i + 1, benzer şekilde i +=3için bir kısaltmadır i = i + 3.


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

ek

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ü operatörün son kısmı, adım adım boyutunu artırmanıza olanak tanır. Örneğin, i ++, 1 artış anlamına gelir. İ + = 2, i = i + 2, ... ile aynıdır, vb. Örnek:

let val= [];

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


console.log(val);

Beklenen sonuçlar: "2,4,6,8"

'i', istenen adım boyutuna bağlı olarak herhangi bir kayan nokta veya tam sayı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.