2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

자바스크립트에서 Array.prototype.flatMap()의 사용법은 무엇인가요?

_____
Q1: Array.prototype.flatMap()이란 무엇인가요?
A1: `flatMap()`은 배열 메서드로서, 배열의 각 요소에 대해 주어진 함수를 호출하여 결과 배열을 만들고, 그 결과 배열들을 깊이 1까지 평탄화(flatten)하여 새로운 배열을 반환합니다.

---

Q2: flatMap()과 map(), 그리고 flat()의 차이점은 무엇인가요?
A2:
- `map()`은 각 요소에 대해 함수를 적용해 새로운 배열을 만들지만, 중첩 배열(배열 안의 배열)을 평탄화하지 않습니다.
- `flat()`은 기존 배열 내 중첩 배열을 평탄화하지만, 요소 변환 기능은 없습니다.
- `flatMap()`은 `map()`과 `flat(1)`를 연속으로 실행하는 것과 같아, 매핑 후 결과를 1단계 평탄화합니다.

---

Q3: flatMap()의 기본 문법은 어떻게 되나요?
A3:
```javascript
const newArray = arr.flatMap(function(element, index, array) {
// 각 요소에 대해 처리 후 배열 또는 값 반환
});
```

또는 화살표 함수로:
```javascript
const newArray = arr.flatMap(element => /* 요소 처리 결과 반환 */);
```

---

Q4: flatMap() 콜백 함수에서 반환할 값의 형태는 어떻게 되나요?
A4: 일반 값 혹은 배열 모두 반환할 수 있습니다. 반환된 배열들은 최종 결과 배열 내에서 1단계만 평탄화됩니다. 즉, 콜백 함수가 배열을 반환하면 그 배열의 요소들이 결과 배열에 직접 포함됩니다.

---

Q5: flatMap() 사용 예제를 보여주세요.
A5:
```javascript
const arr = [1, 2, 3];

// 각 숫자에 대해 문자 배열로 매핑 후 flatten
const result = arr.flatMap(x => [x, x * 2]);
console.log(result); // [1, 2, 2, 4, 3, 6]
```

---

Q6: flatMap()을 써서 문자열에서 단어별로 분리해 배열 생성하는 예는?
A6:
```javascript
const sentences = ["Hello world", "JavaScript is fun"];
const words = sentences.flatMap(sentence => sentence.split(" "));
console.log(words); // ["Hello", "world", "JavaScript", "is", "fun"]
```

---

Q7: flatMap() 사용 시 주의할 점은 무엇인가요?
A7:
- 평탄화 깊이는 1단계만 적용됩니다. 깊은 중첩 배열에는 `flatMap()`만으로는 완전한 평탄화가 어렵습니다.
- 콜백 함수는 반드시 값 또는 배열을 반환해야 하며, `undefined` 반환 시 빈 요소로 처리됩니다.
- IE를 포함한 구형 브라우저는 지원하지 않으므로 폴리필을 사용할 필요가 있습니다.

---

Q8: 성능 측면에서 flatMap() 사용이 유리한 경우는?
A8: 배열 변환과 평탄화를 별도 수행하는 것보다 `flatMap()`을 한 번 호출하는 것이 일반적으로 더 효율적입니다. 예를 들어, `arr.map(fn).flat()`보다 `arr.flatMap(fn)`이 성능 및 코드 가독성에서 유리할 수 있습니다.

---

요약:
`flatMap()`은 배열의 요소를 매핑하면서 중첩 배열을 1단계 평탄화하는 메서드로, 배열 데이터를 다루는 데 매우 편리한 ES2019(ES10) 신규 기능입니다. 변환과 평탄화가 필요한 작업에서 유용하게 활용할 수 있습니다.
`Array.prototype.flatMap()`은 JavaScript에서 배열을 다룰 때 매우 유용한 메서드로, 배열의 각 요소에 대해 주어진 함수를 호출한 후, 그 결과를 평탄화(flatten)하여 새로운 배열을 생성합니다.

이 메서드는 ES2019(ES

10)에서 도입되었습니다.

기본 사용법`flatMap()` 메서드는 다음과 같은 형식으로 사용됩니다:```javascriptlet newArray = array.flatMap(callback(currentValue[, index[, array]])[, thisArg]);```- callback : 각 요소에 대해 실행할 함수. 이 함수는 세 가지 인수를 받을 수 있습니다: - currentValue : 현재 처리 중인 배열 요소. - index (선택적): 현재 처리 중인 요소의 인덱스. - array (선택적): `flatMap`을 호출한 배열. - thisArg (선택적): callback 함수에서 `this`로 사용할 값. 작동 방식`flatMap()`은 먼저 각 요소에 대해 주어진 함수를 실행한 후, 그 결과를 1단계 평탄화합니다.

즉, 중첩된 배열이 있을 경우, 한 단계만 평탄화하여 새로운 배열을 생성합니다.

예제1. 기본 예제 ```javascriptconst numbers = [1, 2, 3, 4];const doubled = numbers.flatMap(num => [num, num * 2]);console.log(doubled); // [1, 2, 2, 4, 3, 6, 4, 8]```위의 예제에서는 각 숫자에 대해 두 개의 값을 생성하는 함수를 사용했습니다.

결과적으로 각 숫자와 그 숫자의 두 배가 포함된 배열이 생성되었습니다.

2. 중첩 배열 평탄화 ```javascriptconst nestedArray = [[1, 2], [3, 4], [5]];const flattened = nestedArray.flatMap(arr => arr);console.log(flattened); // [1, 2, 3, 4, 5]```이 예제에서는 중첩 배열을 평탄화하는 데 사용되었습니다.

각 내부 배열을 반환하는 함수를 사용하여, 최종적으로 1단계 평탄화된 배열을 얻었습니다.

3. 조건부 필터링과 평탄화 ```javascriptconst words = ["hello", "world", "flat", "map"];const result = words.flatMap(word => word.includes("a") ? [word] : []);console.log(result); // ["flat", "map"]```이 예제에서는 각 단어를 검사하여 "a"가 포함된 단어만 포함하는 배열을 생성했습니다.

조건을 만족하지 않는 경우 빈 배열을 반환하여, 최종적으로 "flat"과 "map"만 포함된 배열을 얻었습니다.

성능 고려사항`flatMap()`은 배열의 각 요소에 대해 함수를 호출하고, 그 결과를 평탄화하기 때문에, 성능에 영향을 미칠 수 있습니다.

특히, 큰 배열이나 복잡한 계산을 수행하는 경우에는 성능을 고려해야 합니다.

일반적으로 `flatMap()`은 가독성을 높이고 코드의 간결함을 제공하지만, 성능이 중요한 경우에는 다른 방법을 고려할 수도 있습니다.

결론`Array.prototype.flatMap()`은 배열을 다룰 때 매우 유용한 메서드로, 각 요소에 대한 변환과 평탄화를 동시에 수행할 수 있는 기능을 제공합니다.

이를 통해 코드의 가독성을 높이고, 배열 처리 작업을 더 간결하게 만들 수 있습니다.

다양한 상황에서 활용할 수 있으며, 특히 중첩 배열을 다룰 때 유용하게 사용될 수 있습니다.

작성자: 박예린 [비회원] | 작성일자: 1년 전 2024-09-08 14:47:28
조회수: 145 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.