Một vòng lặp for có thể tăng / giảm nhiều hơn một không?


119

Có những cách nào khác để tăng forvòng lặp trong Javascript ngoài i++++i? Ví dụ, tôi muốn tăng lên 3 thay vì một.

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

4
Bạn có thể thay thế i = i + 3 cho đối số thứ ba không? Hay chỉ có trong Java?
CptJesus

1
Có, điều đó tốt i++++igiống như i+=1nếu được sử dụng trong khai báo vòng lặp for i+=3thì sẽ hoạt động.
elclanrs

1
Một forvòng lặp không tăng bất cứ điều gì. Mã của bạn được sử dụng trong forcâu lệnh không. Bạn hoàn toàn phụ thuộc vào cách / nếu / ở đâu / khi nào bạn muốn sửa đổi ihoặc bất kỳ biến nào khác cho vấn đề đó.
Tôi ghét sự lười biếng

2
Đó không phải là vòng lặp for, mà là vòng lặp vô hạn. Ý bạn là i+=3.
ninjagecko

2
Tôi hiểu rằng đây là một câu hỏi đơn giản với một giải pháp đơn giản, nhưng lý do cho sự phản đối là gì? Tôi khá chắc chắn rằng nó không phải là một bản sao.
brentonstrine

Câu trả lời:


253

Sử dụng += toán tử gán :

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

Về mặt kỹ thuật, bạn có thể đặt bất kỳ biểu thức nào bạn muốn trong biểu thức cuối cùng của vòng lặp for, nhưng nó thường được sử dụng để cập nhật biến bộ đếm.

Để biết thêm thông tin về từng bước của vòng lặp for, hãy xem bài viết MDN .


Cảm ơn vì các chi tiết - tôi khá chắc chắn có một cách để đưa các biểu thức nâng cao hơn vào vị trí thứ ba - tôi đã quên rằng nó cần phải xác định biến, vì vậy rõ ràng là i+3không hoạt động.
brentonstrine

@brentonstrine: Không sao, rất vui vì tôi có thể giúp được
Andrew Whitaker

Nguyên nhân của vòng lặp vô tận khi chúng ta làm là gì i+3?
Sanjay Shr

1
@SanjayShr i+3không làm thay đổi giá trị củai
Nahid

@Nahid Vâng, tôi đã nhận xét câu trả lời của mình. Thanx
Sanjay Shr

13

Một forvòng lặp:

for(INIT; TEST; ADVANCE) {
    BODY
}

Có nghĩa là sau:

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

Bạn có thể viết hầu như bất kỳ biểu hiện cho INIT, TEST, ADVANCE, và BODY.

Xin lưu ý rằng các ++toán tử và các biến thể là các toán tử có tác dụng phụ (bạn nên cố gắng tránh chúng nếu bạn không sử dụng chúng như i+=1và tương tự):

  • ++i có nghĩa i+=1; return i
  • i++ có nghĩa oldI=i; i+=1; return oldI

Thí dụ:

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

hoặc for (var i = 0; i < 10; i+=2), bởi vì i=i+2bằngi+=2
arximughal

5

Câu trả lời của Andrew Whitaker là đúng, nhưng bạn có thể sử dụng bất kỳ biểu thức nào cho bất kỳ phần nào.
Chỉ cần nhớ biểu thức thứ hai (giữa) sẽ đánh giá để nó có thể được so sánh với một boolean truehoặc false.

Khi tôi sử dụng một forvòng lặp , tôi nghĩ về nó như

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

như hiện tại

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

1

Bạn chắc chắn có thể. Những người khác đã chỉ ra một cách chính xác rằng bạn cần phải làm i += 3. Bạn không thể làm những gì bạn đã đăng bởi vì tất cả những gì bạn đang làm ở đây là thêm i + 3nhưng không bao giờ gán kết quả lại cho i. i++chỉ là cách viết tắt của i = i + 1, tương tự i +=3là cách viết tắt của i = i + 3.


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

bổ sung

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

Phần cuối cùng của toán tử bậc ba cho phép bạn chỉ định kích thước bước tăng dần. Ví dụ: i ++ có nghĩa là tăng 1. i + = 2 giống như i = i + 2, ... vv Ví dụ:

let val= [];

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


console.log(val);

Kết quả mong đợi: "2,4,6,8"

'i' có thể là bất kỳ dấu phẩy động hoặc số nguyên nào tùy thuộc vào kích thước bước mong muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.