สามารถเพิ่ม / ลดลูปมากกว่าหนึ่งได้หรือไม่?


120

มีวิธีอื่นในการเพิ่มforลูปใน Javascript นอกเหนือจากi++และ++iหรือไม่? ตัวอย่างเช่นฉันต้องการเพิ่มทีละ 3 แทนที่จะเป็นหนึ่ง

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

4
คุณไม่สามารถแทนที่ i = i + 3 สำหรับอาร์กิวเมนต์ที่สามได้หรือไม่? หรือว่ามีเฉพาะใน Java?
CptJesus

1
ใช่ไม่เป็นไรi++และ++iเหมือนกับi+=1ว่าถ้าใช้ในการประกาศ for loop i+=3ก็ใช้ได้
elclanrs

1
การforวนซ้ำไม่ได้เพิ่มอะไรเลย รหัสของคุณที่ใช้ในใบforแจ้งยอดไม่ ทั้งหมดนี้ขึ้นอยู่กับคุณว่าคุณต้องการแก้ไขอย่างไร / if / where / เมื่อiใดหรือตัวแปรอื่น ๆ สำหรับเรื่องนั้น
I Hate Lazy

2
นั่นไม่ใช่การวนซ้ำมันเป็นวงที่ไม่มีที่สิ้นสุด คุณหมายถึงi+=3.
ninjagecko

2
ฉันเข้าใจว่านี่เป็นคำถามธรรมดา ๆ พร้อมวิธีแก้ปัญหาง่ายๆ แต่สาเหตุของการโหวตลดคืออะไร? ฉันค่อนข้างมั่นใจว่ามันไม่ซ้ำกัน
brentonstrine

คำตอบ:


255

ใช้ตัว+= ดำเนินการกำหนด :

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

ในทางเทคนิคคุณสามารถวางนิพจน์ใดก็ได้ที่คุณต้องการในนิพจน์สุดท้ายของ for loop แต่โดยทั่วไปจะใช้เพื่ออัปเดตตัวแปรตัวนับ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนของแต่ละวงตรวจสอบบทความ MDN


ขอบคุณสำหรับรายละเอียด - ฉันค่อนข้างแน่ใจว่ามีวิธีในการใส่นิพจน์ขั้นสูงเพิ่มเติมลงในช่องที่สาม - ฉันลืมไปแล้วว่าจำเป็นต้องกำหนดตัวแปรดังนั้นจึงi+3ไม่ได้ผลอย่างชัดเจน
brentonstrine

@brentonstrine: ไม่มีปัญหาดีใจที่ช่วยได้
Andrew Whitaker

อะไรคือสาเหตุของการวนซ้ำที่ไม่สิ้นสุดเมื่อเราทำi+3?
Sanjay Shr

1
@SanjayShr i+3ไม่เปลี่ยนค่าของi
Nahid

@ นาฮิดใช่ฉันแสดงความคิดเห็นคำตอบของฉัน Thanx
Sanjay Shr

13

forห่วง:

for(INIT; TEST; ADVANCE) {
    BODY
}

หมายถึงสิ่งต่อไปนี้:

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

คุณสามารถเขียนเกือบแสดงออกใด ๆ สำหรับINIT, TEST, และADVANCEBODY

โปรดทราบว่าตัว++ดำเนินการและตัวแปรเป็นตัวดำเนินการที่มีผลข้างเคียง (ควรพยายามหลีกเลี่ยงหากคุณไม่ได้ใช้i+=1ตัวดำเนินการดังกล่าว):

  • ++i วิธี i+=1; return i
  • i++ วิธี oldI=i; i+=1; return oldI

ตัวอย่าง:

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


5

คำตอบของ Andrew Whitaker เป็นความจริง แต่คุณสามารถใช้นิพจน์ใดก็ได้
เพียงจำไว้ว่านิพจน์ที่สอง (กลาง) ควรประเมินเพื่อเปรียบเทียบกับบูลีนtrueหรือfalse.

เมื่อฉันใช้forลูปฉันคิดว่ามันเป็น

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

ในฐานะที่เป็น

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

1

คุณสามารถทำได้อย่างแน่นอน คนอื่น ๆ i += 3ได้อย่างถูกต้องชี้ให้เห็นว่าคุณต้องทำ คุณไม่สามารถทำสิ่งที่คุณได้โพสต์เพราะสิ่งที่คุณกำลังทำอยู่นี่คือการเพิ่มแต่ไม่เคยกำหนดผลที่ได้กลับไปi + 3 เป็นเพียงการจดชวเลขสำหรับในทำนองเดียวกันคือชวเลขii++i = i + 1i +=3i = i + 3


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

เพิ่มเติม

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

ส่วนสุดท้ายของตัวดำเนินการ ternary ช่วยให้คุณระบุขนาดขั้นตอนที่เพิ่มขึ้น ตัวอย่างเช่น i ++ หมายถึงการเพิ่มทีละ 1 i + = 2 เหมือนกับ i = i + 2, ... ฯลฯ ตัวอย่าง:

let val= [];

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


console.log(val);

ผลลัพธ์ที่คาด: "2,4,6,8"

'i' อาจเป็นจุดลอยตัวหรือจำนวนเต็มก็ได้ขึ้นอยู่กับขนาดขั้นตอนที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.