Recursion and Multidimensional Structures in JavaScript
กำหนดให้มีอาร์เรย์หลายมิติที่มีระดับความซ้อนภายในไม่แน่นอน ตัวอย่างเช่น:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
ดังที่คุณเห็น อาร์เรย์นี้มีโครงสร้างที่ซับซ้อน และคาดว่าโครงสร้างนี้อาจจะเป็นแบบใดก็ได้ และระดับ ความซ้อนอาจจะมีได้หลายระดับตามต้องการ
สมมติว่าเราต้องการแสดงผลค่าแบบ primitive (ซึ่งไม่ใช่อาร์เรย์) ทุกตัวของอาร์เรย์ของเราในคอนโซล ในกรณีนี้ การใช้ลูปเพื่อสำรวจอาร์เรย์นี้ จะทำได้ยาก เนื่องจากอาร์เรย์มีโครงสร้าง ที่ไม่แน่นอน และระดับความซ้อนภายในไม่ทราบล่วงหน้า
อย่างไรก็ตาม การสำรวจอาร์เรย์ลักษณะนี้ สามารถใช้ Recursion ได้อย่างสะดวก
เริ่มต้นด้วยการสร้างฟังก์ชัน ซึ่งรับพารามิเตอร์ เป็นอาร์เรย์ของเรา และภายในฟังก์ชัน เราจะสร้างลูปเพื่อสำรวจอาร์เรย์ของเรา:
function 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 และสมาชิกที่เป็นอาร์เรย์:
function 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) โดย ส่งพารามิเตอร์เป็นอาร์เรย์นั้น:
function 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]]]]);
กำหนดให้มีออบเจ็กต์หลายมิติที่มีระดับความซ้อนภายในไม่แน่นอน ตัวอย่างเช่น:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
ให้ใช้ Recursion เพื่อแสดงผลสมาชิกแบบ primitive ทั้งหมดของออบเจ็กต์นี้ในคอนโซล
กำหนดให้มีอาร์เรย์หลายมิติที่มีระดับความซ้อนภายในไม่แน่นอน ตัวอย่างเช่น:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
ให้เขียนโค้ดที่แปลงอาร์เรย์หลายมิติของเรา ให้เป็นอาร์เรย์หนึ่งมิติ (flatten array) สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้:
[1, 2, 7, 8, 3, 4, 5, 6, 7]