สมมุติว่าเรามีอาร์เรย์ของตัวเลขแบบนี้ -
const arr = [1, 4, 5, [ 5, 6, [ 6, 19, 5, [5] ], [5, 7, 6, [6, 8]], 8 ], 6];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่นำอาร์เรย์ที่ซ้อนกัน ซ้อนกันในระดับใดก็ได้ตามอำเภอใจ
จากนั้นฟังก์ชันของเราควรเตรียมและส่งคืนอาร์เรย์ใหม่ที่ไม่ได้เป็นเพียงแค่อาร์เรย์อินพุตแบบแบน
มีสองเงื่อนไขที่เราถูกขอให้หลีกเลี่ยงในขณะที่เขียนฟังก์ชันของเรา -
-
เราไม่สามารถใช้ฟังก์ชันเรียกซ้ำที่กำหนดเองได้ทุกที่ในโค้ดของเรา
-
เราไม่สามารถใช้เมธอด Array.prototype.flat() ในโค้ดของเราได้
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [1, 4, 5, [ 5, 6, [ 6, 19, 5, [5] ], [5, 7, 6, [6, 8]], 8 ], 6]; const flattenWithoutRecursion = (arr = []) => { const res = []; let level = 0, ref = [arr], counter = [0]; while(level >= 0){ if (counter[level] >= ref[level].length) { level--; continue; }; if (Array.isArray(ref[level][counter[level]])) { ref[level + 1] = ref[level][counter[level]] counter[level]++; level++; counter[level] = 0; continue; }; res.push(ref[level][counter[level]]); counter[level]++; }; return res; }; console.log(flattenWithoutRecursion(arr));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[ 1, 4, 5, 5, 6, 6, 19, 5, 5, 5, 7, 6, 6, 8, 8, 6 ]