Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 중첩 배열의 전체 요소 개수(깊은 카운트) 구하기

문제 정의

중첩된(nested) 배열을 입력받아, 배열 안에 포함된 모든 요소의 총 개수, 즉 '깊은 카운트(deep count)'를 반환하는 JavaScript 함수를 작성해야 합니다. 단순히 최상위 레벨의 요소만 세는 것이 아니라, 여러 겹으로 중첩된 하위 배열의 요소까지 모두 포함하여 개수를 구해야 합니다.

입력 예시

const arr = [1, 2, [3, 4, [5]]];

출력 예시

const output = 7;

배열을 레벨별로 나누어 살펴보면 다음과 같습니다.

  • 레벨 1: 1, 2, [3, 4, [5]] → 3개
  • 레벨 2: 3, 4, [5] → 3개
  • 레벨 3: 5 → 1개

각 레벨의 요소 개수를 모두 합하면 3 + 3 + 1 = 7이 되므로, 이 배열의 깊은 카운트는 7입니다.

예제 코드

다음은 위 문제를 해결하는 코드입니다.

const arr = [1, 2, [3, 4, [5]]];
const deepCount = (arr = []) => {
    return arr
    .reduce((acc, val) => {
        return acc + (Array.isArray(val) ? deepCount(val) : 0);
    }, arr.length);
};
console.log(deepCount(arr));

코드 설명

이 코드의 핵심 동작 원리는 다음과 같습니다.

  • Array.prototype.reduce() 메서드를 사용해 배열의 각 요소를 순회하면서 누적값(acc)을 계산합니다.
  • 초기값으로 arr.length, 즉 최상위 레벨의 요소 개수를 지정하여 기본 개수를 먼저 더합니다.
  • 순회 중인 요소가 배열인지 Array.isArray()로 확인하고, 배열이라면 해당 함수를 재귀적으로 호출하여 내부 요소의 개수를 추가로 더합니다.
  • 일반 값이라면 추가될 개수는 0이므로 누적값에 영향을 주지 않습니다.

이처럼 재귀 호출을 활용하면 아무리 깊게 중첩된 배열이라도 모든 레벨의 요소를 빠짐없이 셀 수 있습니다.

실행 결과

7