Computer >> Máy Tính >  >> Lập trình >> Javascript

Hàm làm phẳng mảng gồm nhiều mảng lồng nhau mà không cần đệ quy trong JavaScript

Giả sử, chúng ta có một mảng số lồng nhau như thế này -

const arr = [1, 4, 5, [
   5, 6, [
      6, 19, 5, [5]
   ], [5, 7, 6, [6, 8]], 8
], 6];

Chúng tôi được yêu cầu viết một hàm JavaScript có một mảng lồng nhau, lý tưởng là lồng vào bất kỳ cấp độ tùy ý nào.

Sau đó, hàm của chúng ta sẽ chuẩn bị và trả về một mảng mới không chỉ là phiên bản phẳng của mảng đầu vào.

Có hai điều kiện mà chúng tôi được yêu cầu tránh khi viết hàm của mình -

  • Chúng tôi không thể sử dụng bất kỳ hàm đệ quy tùy chỉnh nào ở bất kỳ vị trí nào trong mã của chúng tôi.

  • Chúng tôi không thể sử dụng phương thức Array.prototype.flat () trong mã của mình.

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

[
   1, 4, 5, 5, 6, 6,
   19, 5, 5, 5, 7, 6,
   6, 8, 8, 6
]