개념
flatMap은 각 요소를 매핑한 결과를 한 단계만 평탄화하는 배열 메서드 arr.map(fn).flat(1)과 동등
동작
- 콜백 시그니처 (value, index, array)
- 콜백이 배열을 반환하면 concat 후 depth 1 평탄화
- 더 깊은 중첩은 유지됨
- 희소 배열의 빈 슬롯은 평탄화 과정에서 제거됨
- ES2019 이후 표준 지원 범위 넓음
예시
const arr = [1, 2, 3, 4]
arr.flatMap(x => [x * 2]) // => [2, 4, 6, 8]
arr.flatMap(x => [[x * 2]]) // => [[2], [4], [6], [8]]
const s = ["it's Sunny in", "", "California"]
s.flatMap(x => x.split(" ")) // => ["it's","Sunny","in","","California"]
주의와 팁
- 깊이 2 이상 평탄화 필요 시 flat(depth) 사용 또는 map + flat 조합 고려
- 콜백은 배열을 반환하는 패턴 권장, 스칼라를 섞으면 의도치 않은 구조 발생 가능
- 희소 배열 처리 시 구멍이 사라지는 특성 주의
- 성능상 불필요한 중첩 생성은 피하고 필요한 경우에만 flatMap 사용 권장