การประมวลผลซ้ำใน JavaScript

การประมวลผลซ้ำใน JavaScript

ในบทความนี้ เราจะอธิบายการประมวลผลซ้ำใน JavaScript

YouTube Video

คำสั่ง for ใน JavaScript

ไวยกรณ์พื้นฐาน

1for (initialization; condition; update) {
2  // Code to repeat
3}

คำสั่ง for ใน JavaScript เป็นไวยากรณ์สำหรับการทำการวนซ้ำ มันจะดำเนินการบล็อกโค้ดที่กำหนดซ้ำ ๆ ตราบใดที่เงื่อนไขที่กำหนดยังคงเป็นจริง โดยการใช้คำสั่ง for สามารถดำเนินกระบวนการเดียวกันได้อย่างมีประสิทธิภาพหลายครั้ง

  • การกำหนดค่าเริ่มต้น (initialization): ส่วนที่ถูกดำเนินการเพียงครั้งเดียวก่อนเริ่มลูป กำหนดตัวแปรเริ่มต้น เช่น ตัวนับลูป
  • เงื่อนไข (condition): เงื่อนไขที่กำหนดว่าจะดำเนินการลูปต่อหรือไม่ หาก true ลูปจะดำเนินต่อ; หาก false ลูปจะสิ้นสุด
  • การอัปเดต (update): ดำเนินการเมื่อสิ้นสุดแต่ละลูปเพื่ออัปเดตตัวนับลูป

ตัวอย่าง

1for (let i = 0; i < 5; i++) {
2    console.log(i);
3}

ในกรณีนี้, i เริ่มต้นที่ 0 และลูปจะดำเนินการตราบใดที่ i < 5 เป็น true i++ เพิ่มค่า i ทีละ 1 ในแต่ละรอบของลูป ผลลัพธ์คือ ตัวเลขตั้งแต่ 0 ถึง 4 จะถูกแสดง

ขอบเขตของตัวนับลูป

ประกาศหรือกำหนดตัวแปรในส่วนการกำหนดค่าเริ่มต้นของคำสั่ง for ตัวแปรที่ประกาศในที่นี้จะใช้ได้เฉพาะภายในลูปเท่านั้น

1for (let i = 0; i < 3; i++) {
2    console.log(i); // Outputs 0, 1, 2
3}
4console.log(i);  // ReferenceError
  • ตามที่แสดงในตัวอย่างนี้ การอ้างถึงตัวแปรที่อยู่นอกคำสั่ง for จะทำให้เกิดข้อผิดพลาด

การวนลูปไม่รู้จบ

การตั้งค่าเงื่อนไขที่ไม่สิ้นสุดจะนำไปสู่การวนลูปไม่รู้จบ สิ่งนี้อาจทำให้เบราว์เซอร์หรือระบบทำงานหนัก ดังนั้นจึงควรใช้อย่างระมัดระวัง

1for (;;) {
2    console.log("Infinite loop");
3    break; // Exits the infinite loop with break
4}

อาเรย์และคำสั่ง for

การใช้คำสั่ง for ควบคู่กับอาเรย์เป็นเรื่องที่พบบ่อย มันสะดวกสำหรับการประมวลผลแต่ละองค์ประกอบของอาร์เรย์

ตัวอย่าง

1let fruits = ["apple", "banana", "cherry"];
2
3for (let i = 0; i < fruits.length; i++) {
4    console.log(fruits[i]);
5}
6// Outputs "apple", "banana", "cherry"

วิธีนี้คุณสามารถประมวลผลแต่ละองค์ประกอบของอาร์เรย์โดยใช้ดัชนี

โครงสร้างลูปแบบอื่น ๆ

คำสั่ง for...of

คำสั่ง for...of ใช้สำหรับอ็อบเจ็กต์ที่วนซ้ำได้ เช่น อาร์เรย์และสตริง

1let fruits = ["apple", "banana", "cherry"];
2
3for (let fruit of fruits) {
4    console.log(fruit);
5}
6// Outputs "apple", "banana", "cherry"

วิธีนี้ช่วยให้คุณประมวลผลแต่ละองค์ประกอบได้โดยไม่ต้องใช้ดัชนี

คำสั่ง for...in

คำสั่ง for...in ใช้ในการวนซ้ำผ่านคุณสมบัติของอ็อบเจ็กต์

1let person = { name: "John", age: 30, city: "Tokyo" };
2
3for (let key in person) {
4    console.log(key + ": " + person[key]);
5}
6// Outputs "name: John", "age: 30", "city: Tokyo"

ดังนี้คุณสามารถดำเนินการกับแต่ละองค์ประกอบโดยใช้คีย์

สรุป

  • คำสั่ง for เป็นโครงสร้างลูปที่มีสามส่วน: การเริ่มต้น เงื่อนไข และการอัพเดต
  • คุณสามารถควบคุมพฤติกรรมของลูปได้โดยใช้ break หรือ continue
  • เมื่อใช้ร่วมกับอาร์เรย์หรืออ็อบเจ็กต์ องค์ประกอบหรือคุณสมบัติสามารถประมวลผลได้อย่างมีประสิทธิภาพ

คำสั่ง while ใน JavaScript

ไวยกรณ์พื้นฐาน

1while (condition) {
2    // Code that repeats while the condition is true
3}

คำสั่ง while ใน JavaScript เป็นโครงสร้างลูปที่ดำเนินการซ้ำตราบเท่าที่เงื่อนไขที่ระบุเป็น true คล้ายกับคำสั่ง for คำสั่ง while ระบุเฉพาะเงื่อนไข

  • เงื่อนไข: เขียนนิพจน์เงื่อนไขที่กำหนดว่าจะทำการวนซ้ำต่อหรือไม่ ลูปจะดำเนินต่อไปเมื่อ true และสิ้นสุดเมื่อเป็น false

ตัวอย่าง

1let i = 0;
2
3while (i < 5) {
4    console.log(i);
5    i++;
6}
7console.log(i);  // 5

ในตัวอย่างนี้ ลูปเริ่มต้นด้วยตัวแปร i เป็น 0 และดำเนินการตราบเท่าที่ i < 5 เป็น true ในแต่ละรอบของลูปค่า i จะเพิ่มขึ้นทีละ 1 และเมื่อ i กลายเป็น 5 เงื่อนไขจะกลายเป็น false และลูปจะจบลง ผลลัพธ์คือคำสั่ง while จะแสดงจาก 0 ถึง 4

ไม่เหมือนกับคำสั่ง for ในคำสั่ง while การเริ่มต้นและการอัปเดตตัวแปรจะเขียนเป็นคำสั่งแยกต่างหาก คุณยังสามารถอ้างอิงตัวแปรหลังคำสั่ง while ได้ ในกรณีนี้ จะแสดง 5 หลังจากคำสั่ง while สิ้นสุดลง

การวนลูปไม่รู้จบ

หากเงื่อนไขเป็น true ตลอดเวลา จะเกิดลูปที่ไม่สิ้นสุด ควรหลีกเลี่ยงลูปที่ไม่สิ้นสุด แต่ถ้าใช้อย่างตั้งใจ คุณสามารถหยุดลูปได้ด้วยคำสั่ง break

ตัวอย่าง

1while (true) {
2    console.log("Infinite loop");
3    break;  // Ends the loop with `break`
4}

การประมวลผลอาร์เรย์ด้วยลูป while

สามารถประมวลผลอาร์เรย์ด้วยคำสั่ง while ได้เช่นกัน

ตัวอย่าง

1let fruits = ["apple", "banana", "cherry"];
2let i = 0;
3
4while (i < fruits.length) {
5    console.log(fruits[i]);
6    i++;
7}
8// Outputs "apple", "banana", "cherry"

คำสั่ง do...while

ไวยกรณ์พื้นฐาน

1do {
2    // Code that is executed at least once
3} while (condition);

คำสั่ง do...while ซึ่งเป็นรูปแบบหนึ่งของคำสั่ง while จะตรวจสอบเงื่อนไขหลังจากที่ทำลูปไปแล้วอย่างน้อยหนึ่งครั้ง ในขณะที่คำสั่ง while จะตรวจสอบเงื่อนไขก่อน คำสั่ง do...while จะทำกระบวนการอย่างน้อยหนึ่งครั้งก่อนตรวจสอบเงื่อนไข

ตัวอย่าง

1let i = 0;
2
3do {
4    console.log(i);
5    i++;
6} while (i < 5);

ในตัวอย่างนี้ จะแสดงค่าของ i ตั้งแต่ 0 ถึง 4 คำสั่ง do...while แตกต่างจากคำสั่ง while ตรงที่มันจะถูกดำเนินการอย่างน้อยหนึ่งครั้งเสมอ แม้ว่าเงื่อนไขจะเป็น false

สรุป

  • คำสั่ง while ใช้เพื่อดำเนินการโค้ดซ้ำ ๆ ตราบใดที่เงื่อนไขเป็น true
  • ระวังการเกิดลูปไม่มีที่สิ้นสุด แต่คุณสามารถควบคุมการไหลของลูปโดยใช้ break และ continue
  • คำสั่ง do...while มีประโยชน์เมื่อคุณต้องการทำงานในลูปอย่างน้อยหนึ่งครั้ง

break และ continue

คุณสามารถใช้ break และ continue ภายในลูปได้

  • break ใช้เพื่อยุติลูปก่อนเวลาอันควร
  • continue ข้ามการวนลูปปัจจุบันและไปยังการวนลูปครั้งถัดไป

ตัวอย่างการใช้ break

 1for (let i = 0; i < 10; i++) {
 2    if (i === 5) {
 3        break;  // Exits the loop when i is 5
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 2, 3, 4
 8
 9let i = 0;
10
11while (i < 10) {
12    if (i === 5) {
13        break;  // Ends the loop when i is 5
14    }
15    console.log(i++);
16}
17// Outputs 0, 1, 2, 3, 4

ในกรณีนี้ จะใช้ break เมื่อ i มีค่าเป็น 5 ผลลัพธ์คือ ตัวเลขตั้งแต่ 0 ถึง 4 จะถูกแสดง

ตัวอย่างการใช้ continue

 1for (let i = 0; i < 5; i++) {
 2    if (i === 2) {
 3        continue;  // Skips when i is 2
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 3, 4
 8
 9let i = 0;
10while (i < 5) {
11    i++;
12    if (i === 3) {
13        continue;  // Skips when i is 3
14    }
15    console.log(i);
16}
17// Outputs 1, 2, 4, 5

ในกรณีนี้ จะใช้ continue เมื่อ i มีค่าเป็น 2 ผลลัพธ์คือจะแสดงตัวเลขที่ไม่ใช่ 2

ลูปซ้อนกันใน JavaScript

ใน JavaScript การเขียนโปรแกรมโครงสร้าง ลูปซ้อนกัน คือโครงสร้างที่มีลูปหนึ่งอยู่ภายในอีกลูปหนึ่ง ลูปลักษณะนี้มีประสิทธิภาพมากเมื่อใช้งานอัลกอริทึมหรือกระบวนการที่ครอบคลุมหลายมิติหรือหลายชั้น ตัวอย่างเช่น การประมวลผลอาร์เรย์หลายมิติที่มีอาร์เรย์ซ้อนกันเป็นกรณีที่พบได้ทั่วไป

ในที่นี้ เราจะอธิบายโครงสร้างพื้นฐานของลูปซ้อนกัน ตัวอย่างการใช้งาน ข้อควรระวัง และการพิจารณาการปรับแต่งให้เหมาะสม

โครงสร้างพื้นฐานของลูปซ้อนกัน

โครงสร้างพื้นฐานของลูปซ้อนคือรูปแบบที่ลูปหนึ่งหรือมากกว่าถูกฝังอยู่ในอีกลูปหนึ่ง ทุกครั้งที่ลูปด้านนอกถูกดำเนินการหนึ่งครั้ง ลูปด้านในจะถูกดำเนินการตามจำนวนนั้น

ด้านล่างนี้คือตัวอย่างพื้นฐานของลูปซ้อนสองลูป

 1for (let i = 0; i < 3; i++) {
 2    console.log(`Outer loop iteration: ${i}`);
 3
 4    for (let j = 0; j < 2; j++) {
 5        console.log(`  Inner loop iteration: ${j}`);
 6    }
 7}
 8// Output:
 9// Outer loop iteration: 0
10//   Inner loop iteration: 0
11//   Inner loop iteration: 1
12// Outer loop iteration: 1
13//   Inner loop iteration: 0
14//   Inner loop iteration: 1
15// Outer loop iteration: 2
16//   Inner loop iteration: 0
17//   Inner loop iteration: 1

ในโค้ดข้างต้น i จะถูกนับในลูปด้านนอก และ j จะถูกนับในลูปด้านใน ทุกครั้งที่ลูปด้านนอกถูกดำเนินการหนึ่งครั้ง ลูปด้านในจะถูกดำเนินการสองครั้ง

ตัวอย่างการใช้งานจริงของลูปซ้อน

ลูปซ้อนมีประโยชน์อย่างยิ่งสำหรับการจัดการ อาร์เรย์หลายมิติ ตัวอย่างเช่น เมื่อประมวลผลอาร์เรย์สองมิติ คุณจำเป็นต้องจัดการทั้งแถว (ลูปด้านนอก) และคอลัมน์ (ลูปด้านใน)

ในตัวอย่างต่อไปนี้ เราจัดการกับอาร์เรย์สองมิติและพิมพ์แต่ละองค์ประกอบ

 1const matrix = [
 2  [1, 2, 3],
 3  [4, 5, 6],
 4  [7, 8, 9]
 5];
 6
 7for (let row = 0; row < matrix.length; row++) {
 8    for (let col = 0; col < matrix[row].length; col++) {
 9        console.log(`Element at [${row}][${col}] is: ${matrix[row][col]}`);
10    }
11}
12// Output:
13// Element at [0][0] is: 1
14// Element at [0][1] is: 2
15// Element at [0][2] is: 3
16// Element at [1][0] is: 4
17// Element at [1][1] is: 5
18// Element at [1][2] is: 6
19// Element at [2][0] is: 7
20// Element at [2][1] is: 8
21// Element at [2][2] is: 9

ด้วยวิธีนี้ การใช้ลูปซ้อนช่วยให้เข้าถึงแต่ละองค์ประกอบของอาร์เรย์สองมิติได้

หมายเหตุ

มีบางจุดที่ควรคำนึงถึงเมื่อใช้ลูปซ้อน

  1. ปัญหาด้านประสิทธิภาพ

    เมื่อความลึกของลูปซ้อนเพิ่มขึ้น เวลาในการดำเนินการจะเพิ่มขึ้นอย่างมาก ตัวอย่างเช่น หากลูปด้านนอกถูกดำเนินการ 100 ครั้ง และลูปด้านใน 100 ครั้ง จะมีการดำเนินการทั้งหมด 10,000 ครั้ง ดังนั้น หากมีการวนซ้ำของลูปจำนวนมาก ควรพิจารณาการปรับปรุงลูปให้มีประสิทธิภาพ

  2. การประยุกต์ใช้กับอัลกอริทึมที่ซับซ้อน

    ลูปซ้อนมีความทรงพลังมาก แต่เมื่อการประมวลผลซับซ้อนขึ้น โค้ดอาจเข้าใจได้ยาก ดังนั้น เพื่อรักษาความสามารถในการอ่านโค้ด ควรจัดระเบียบการประมวลผลด้วยคอมเมนต์และฟังก์ชันที่เหมาะสม

ข้อพิจารณาในการปรับปรุง

เมื่อใช้ลูปซ้อน สามารถพิจารณาการปรับปรุงดังต่อไปนี้

  1. การหยุดลูปก่อนเวลา

    หากเงื่อนไขที่ระบุตรงภายในลูป คุณสามารถใช้คำสั่ง break เพื่อออกจากลูป วิธีนี้สามารถหลีกเลี่ยงลูปที่ไม่จำเป็นและปรับปรุงประสิทธิภาพได้

1for (let i = 0; i < 5; i++) {
2    for (let j = 0; j < 5; j++) {
3        if (i + j > 5) {
4            break;
5        }
6        console.log(`i: ${i}, j: ${j}`);
7    }
8}
  1. ย้ายการคำนวณออกไปนอกลูป

    แทนที่จะคำนวณซ้ำในลูปทุกครั้ง คุณสามารถคำนวณครั้งหนึ่งนอกลูปและใช้ผลลัพธ์นั้นเพื่อทำให้กระบวนการมีประสิทธิภาพมากขึ้น

 1let array = [1, 2, 3, 4, 5];
 2
 3// Inefficient example (calculating every time)
 4for (let i = 0; i < array.length; i++) {
 5    for (let j = 0; j < array.length; j++) {
 6        let sum = array[i] + array[j];
 7        console.log(sum);
 8    }
 9}
10
11// Efficient example (calculating outside)
12let arrayLength = array.length;
13for (let i = 0; i < arrayLength; i++) {
14    for (let j = 0; j < arrayLength; j++) {
15        let sum = array[i] + array[j];
16        console.log(sum);
17    }
18}

สรุป

ลูปซ้อนไม่ซ้อนกันนั้นมีประโยชน์มากในการจัดการโครงสร้างข้อมูลและอัลกอริทึมที่ซับซ้อนใน JavaScript อย่างไรก็ตาม หากใช้ไม่ถูกต้อง อาจทำให้ประสิทธิภาพลดลงและความสามารถในการอ่านโค้ดลดลง เพื่อใช้ลูปซ้อนอย่างมีประสิทธิภาพ จำเป็นต้องมุ่งเน้นการปรับปรุงลูปและการจัดระเบียบโค้ด รวมถึงใช้วิธีการที่เหมาะสมขึ้นอยู่กับสถานการณ์

คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย

YouTube Video