다음과 같은 중첩된 숫자 배열이 있다고 가정해 보겠습니다. -
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 ]