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
]