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

JavaScript array.flatMap() 메서드 – 중첩 배열을 손쉽게 평탄화하는 방법

JavaScript의 array.flatMap() 메서드는 주어진 중첩 배열을 처리하여 하나의 새로운 평탄화(flat)된 배열을 반환하는 함수입니다. 이름에서 알 수 있듯이 map()flat() 기능을 하나로 결합한 메서드로, 각 요소를 변환(map)한 뒤 결과를 깊이 1 수준까지 자동으로 평탄화해 줍니다.

flatMap() 메서드의 동작 방식

flatMap()은 다음 두 단계를 순서대로 수행하는 것과 동일하게 작동합니다.

  • map(): 배열의 각 요소에 콜백 함수를 적용하여 새로운 값을 생성합니다.
  • flat(1): 변환된 결과에서 깊이 1만큼의 중첩 구조를 제거하여 하나의 배열로 만듭니다.

기본 문법은 다음과 같습니다.

arr.flatMap(callback(currentValue[, index[, array]]))

이제 array.flatMap() 메서드의 실제 사용 예제 코드를 살펴보겠습니다.

예제 코드

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .sample {
        font-size: 20px;
        font-weight: 500;
    }
</style>
</head>
<body>
<h1>JavaScript Array flatMap()</h1>
<div class="sample"></div>
<button class="Btn">CLICK HERE</button>
<h3>
위 버튼을 클릭하면 중첩 배열이 평탄화된 배열로 변환됩니다.
</h3>
<script>
    let fillEle = document.querySelector(".sample");
    let arr = ["cow", ["bull", "lion", "tiger"], "sheep"];
    for (x of arr.entries()) {
        fillEle.innerHTML += x + "<br>";
    }
    var entries = arr.entries();
    document.querySelector(".Btn").addEventListener("click", () => {
        arr = arr.flatMap((x) => x);
        fillEle.innerHTML = "";
        for (x of arr.entries()) {
            fillEle.innerHTML += x + "<br>";
        }
    });
</script>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 출력 화면을 볼 수 있습니다. 초기 상태에서는 ["cow", ["bull", "lion", "tiger"], "sheep"]처럼 문자열과 내부 배열이 함께 포함된 중첩 구조로 표시됩니다.

JavaScript array.flatMap() 메서드 – 중첩 배열을 손쉽게 평탄화하는 방법

그런 다음 "CLICK HERE" 버튼을 클릭하면 flatMap() 메서드가 실행되어 내부 배열이 풀려나고, 모든 요소가 같은 깊이에 위치한 하나의 평탄화된 배열로 변환됩니다.

JavaScript array.flatMap() 메서드 – 중첩 배열을 손쉽게 평탄화하는 방법

정리

flatMap() 메서드는 map()으로 데이터를 변환하면서 동시에 중첩된 배열 구조를 정리해야 할 때 매우 유용합니다. 특히 API 응답 데이터 가공이나 다차원 배열 처리 시 코드를 더 간결하고 가독성 있게 작성할 수 있도록 도와줍니다. 단, 평탄화는 깊이 1까지만 적용되므로 더 깊은 중첩 구조가 필요하다면 flat() 메서드에 원하는 깊이 값을 지정하여 함께 활용하는 것이 좋습니다.