Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ฟังก์ชันเพื่อแผ่อาร์เรย์ของอาร์เรย์ที่ซ้อนกันหลายชุดโดยไม่มีการเรียกซ้ำใน JavaScript


สมมุติว่าเรามีอาร์เรย์ของตัวเลขแบบนี้ -

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
]