Stream - flatMap()

별빛사막·2025년 1월 9일

flatMap()은 배열의 각 요소에 대해 함수를 적용한 후, 결과 배열을 평탄화(flatten)하는 메서드이다. 즉, 배열 내의 각 요소를 변형하거나 확장시켜 새로운 배열을 만들고, 그 결과를 하나의 배열로 합치는 역할을 한다.

1. 동작 방식

  1. 주어진 배열의 각 요소에 대해 변환 함수를 적용한다.
  2. 각 요소에 대한 변환 결과가 배열일 경우, 그 배열을 평탄화하여 하나의 배열로 만든다.
  3. 배열 안의 배열을 병합하여 중첩을 제거한다.

2. 예시

const arr = [1, 2, 3];
const result = arr.flatMap(x => [x, x * 2]);
console.log(result);  // [1, 2, 2, 4, 3, 6]

3. 주요 특징

  • 변환 후 평탄화: map()과 유사하지만, flatMap()은 변환 후 결과 배열을 평탄화한다.

  • 단일 레벨 평탄화: 1단계까지만 평탄화가 이루어지며, 2단계 이상의 중첩은 해결하지 않는다. 즉, 배열 내에 중첩된 배열을 한 단계만 풀어내는 것이다.
    ex. 1차원 배열 → 1차원 배열 , 2차원 배열 → 1차원 배열 , 3차원 배열 → 2차원 배열

  • 배열 내 배열 확장: 배열의 요소를 여러 개로 확장할 수 있다.


4. flatMap() vs map()

  • map()은 배열의 각 요소를 변환하여 새로운 배열을 반환하지만, 변환 결과가 배열이라면 중첩 배열을 그대로 반환한다.
  • flatMap()은 변환 결과를 평탄화하여 중첩 배열을 1단계까지만 풀어낸다.
// map() 사용 예
const arr1 = [1, 2, 3];
const result1 = arr1.map(x => [x, x * 2]);
console.log(result1);  // [[1, 2], [2, 4], [3, 6]]

// flatMap() 사용 예
const arr2 = [1, 2, 3];
const result2 = arr2.flatMap(x => [x, x * 2]);
console.log(result2);  // [1, 2, 2, 4, 3, 6]
profile
조금씩 매일 성장하자

0개의 댓글