Recursion and Multidimensional Structures in JavaScript

กำหนดให้มีอาร์เรย์หลายมิติที่มีระดับความซ้อนภายในไม่แน่นอน ตัวอย่างเช่น:

javascriptlet arr = [
  1,
  [
    2, 7, 8
  ],
  [
    3, 4, [5, [6, 7]],
  ]
];

ดังที่คุณเห็น อาร์เรย์นี้มีโครงสร้างที่ซับซ้อน และคาดว่าโครงสร้างนี้อาจจะเป็นแบบใดก็ได้ และระดับ ความซ้อนอาจจะมีได้หลายระดับตามต้องการ

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

อย่างไรก็ตาม การสำรวจอาร์เรย์ลักษณะนี้ สามารถใช้ Recursion ได้อย่างสะดวก

เริ่มต้นด้วยการสร้างฟังก์ชัน ซึ่งรับพารามิเตอร์ เป็นอาร์เรย์ของเรา และภายในฟังก์ชัน เราจะสร้างลูปเพื่อสำรวจอาร์เรย์ของเรา:

javascriptfunction func(arr) {
  for (let elem of arr) {
    console.log(elem);
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);

ลูปที่เราสร้างขึ้นจะสำรวจเฉพาะ สมาชิกของอาร์เรย์หลักเท่านั้น นั่นคือ ขั้นแรกมันจะแสดงผล 1, ต่อมาคือ [2, 7, 8], และสุดท้ายคือ [3, 4, [5, [6, 7]]].

ตอนนี้เราจะเพิ่มเงื่อนไขในลูปเพื่อแยกสมาชิกที่เป็น primitive และสมาชิกที่เป็นอาร์เรย์:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      // สมาชิกเป็นอาร์เรย์
    } else {
      // สมาชิกเป็น primitive
      console.log(elem);
    }
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);

และตอนนี้ให้ปรับปรุงโค้ดเพื่อที่ว่า หากสมาชิกนั้น เป็นอาร์เรย์ ฟังก์ชันจะเรียกตัวเอง (Recursion) โดย ส่งพารามิเตอร์เป็นอาร์เรย์นั้น:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      func(elem);
    } else {
      console.log(elem);
    }
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Задание 1

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

javascript{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}

ให้ใช้ Recursion เพื่อแสดงผลสมาชิกแบบ primitive ทั้งหมดของออบเจ็กต์นี้ในคอนโซล

Задание 2

กำหนดให้มีอาร์เรย์หลายมิติที่มีระดับความซ้อนภายในไม่แน่นอน ตัวอย่างเช่น:

javascript[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]

ให้เขียนโค้ดที่แปลงอาร์เรย์หลายมิติของเรา ให้เป็นอาร์เรย์หนึ่งมิติ (flatten array) สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้:

javascript[1, 2, 7, 8, 3, 4, 5, 6, 7]