Dapatkah for loop increment / decrement lebih dari satu?

119

Apakah ada cara lain untuk meningkatkan forloop di Javascript selain i++dan ++i? Misalnya, saya ingin menambah 3, bukan satu.

for (var i = 0; i < myVar.length; i+3) {
   //every three
}
brentonstrine.dll
sumber
4
Tidak bisakah Anda mengganti i = i + 3 untuk argumen ketiga? Ataukah itu hanya di Jawa?
CptJesus
1
Ya, itu bagus i++dan ++iseperti i+=1jika digunakan dalam deklarasi loop for sehingga i+=3akan berhasil.
elclanrs
1
Sebuah forloop tidak menambah apapun. Kode Anda digunakan dalam forpernyataan itu. Terserah Anda bagaimana / jika / di mana / kapan Anda ingin mengubah iatau variabel lain dalam hal ini.
I Hate Lazy
2
Itu bukan loop for, ini loop tak terbatas. Maksudmu i+=3.
ninjagecko
2
Saya mengerti bahwa ini adalah pertanyaan sederhana dengan solusi sederhana, tetapi apa alasan downvote tersebut? Saya cukup yakin ini bukan duplikat.
brentonstrine

Jawaban:

253

Gunakan += operator penugasan :

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

Secara teknis, Anda dapat menempatkan ekspresi apa pun yang Anda inginkan di ekspresi akhir loop for, tetapi biasanya digunakan untuk memperbarui variabel counter.

Untuk informasi selengkapnya tentang setiap langkah loop for, lihat artikel MDN .

Andrew Whitaker
sumber
Terima kasih untuk detailnya - Saya cukup yakin ada cara untuk memasukkan ekspresi yang lebih maju ke slot ketiga - Saya baru saja lupa bahwa perlu mendefinisikan variabel, jadi jelas i+3tidak berfungsi.
brentonstrine
@brentonstrine: Tidak masalah, senang saya bisa membantu
Andrew Whitaker
Apa penyebab loop tak berujung saat kita melakukannya i+3 ?
Sanjay Shr
1
@SanjayShr i+3tidak mengubah nilaii
Nahid
@Nahid Ya, saya mengomentari jawaban saya. Thanx
Sanjay Shr
13

Sebuah forlingkaran:

for(INIT; TEST; ADVANCE) {
    BODY
}

Berarti sebagai berikut:

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

Anda dapat menulis hampir semua ekspresi untuk INIT, TEST, ADVANCE, dan BODY.

Perhatikan bahwa ++operator dan varian adalah operator dengan efek samping (seseorang harus mencoba menghindarinya jika Anda tidak menggunakannya seperti i+=1dan sejenisnya):

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

Contoh:

> i=0
> [i++, i, ++i, i, i--, i, --i, i]
[0, 1, 2, 2, 2, 1, 0, 0]
ninjagecko
sumber
8
for (var i = 0; i < 10; i = i + 2) {
    // code here
}​
Adil Malik
sumber
atau for (var i = 0; i < 10; i+=2), karena i=i+2sama dengani+=2
arximughal
5

Jawaban Andrew Whitaker benar, tetapi Anda dapat menggunakan ekspresi apa pun untuk bagian mana pun.
Ingat saja ekspresi kedua (tengah) harus dievaluasi sehingga dapat dibandingkan dengan boolean trueatau false.

Saat saya menggunakan forloop , saya menganggapnya sebagai

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

sebagai makhluk

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

Anda pasti bisa. Orang lain telah menunjukkan dengan benar bahwa Anda perlu melakukannya i += 3. Anda tidak dapat melakukan apa yang telah Anda posting karena yang Anda lakukan di sini hanyalah menambahkan i + 3tetapi tidak pernah menetapkan kembali hasilnya i. i++hanyalah singkatan dari i = i + 1, demikian pula i +=3singkatan dari i = i + 3.

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

tambahan

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
Jayantha
sumber
-1

Bagian terakhir dari operator terner memungkinkan Anda menentukan ukuran langkah kenaikan. Misalnya, i ++ berarti kenaikan sebesar 1. i + = 2 sama dengan i = i + 2, ... dll. Contoh:

let val= [];

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


console.log(val);

Hasil yang diharapkan: "2,4,6,8"

'i' bisa berupa floating point atau bilangan bulat apa pun, tergantung ukuran langkah yang diinginkan.

Neville Lusimba
sumber