Array.prototype.flatMap() 이란?
- 배열의 각 요소에 주어진 콜백 함수를 적용한 다음 그 결과를 한 단계씩 평탄화하여 형성된 새 배열을 반환한다.(콜백에서 반환된 유사배열은 평탄화하지 않는다)
map()
뒤에 깊이 1의flat()
을 체이닝 하는 것(arr.map(...args).flat(1)
)과 동일하지만, 두 메서드를 따로 호출하는 것보다 더 효율적이다.
const arr1 = [1, 2, 3, 4];
arr1.map((x) => [x * 2]); // [[2], [4], [6], [8]]
arr1.flatMap((x) => [x * 2]); // [2, 4, 6, 8]
// 오직 한 단계만 평탄화됩니다.
arr1.flatMap((x) => [[x * 2]]); // [[2], [4], [6], [8]]
const arrayLike = {
length: 3,
0: 1,
1: 2,
2: 3,
3: 4,
// length가 3이므로 flatMap()에 의해 무시됩니다.
};
console.log(Array.prototype.flatMap.call(arrayLike, (x) => [x, x * 2]));
// [1, 2, 2, 4, 3, 6]
// 콜백에서 반환된 유사 배열은 평탄화되지 않습니다.
console.log(
Array.prototype.flatMap.call(arrayLike, (x) => ({
length: 1,
0: x,
})),
);
// [ { '0': 1, length: 1 }, { '0': 2, length: 1 }, { '0': 3, length: 1 } ]
FlapMap takes single pass & doesn't produce intermediate array
// using filterAndMap
console.time("filterAndMap")
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const squaredOddNumbers = numbers
.filter(num => num % 2 !== 0)
.map(num => num * num)
console.log(squaredOddNumbers); // [1, 9, 25, 49, 81]
console.timeEnd("filterAndMap")
참조
https://javascript.plainenglish.io/i-bet-you-dont-use-these-javascript-tricks-and-pratices-5ab5438ed4c8
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap
'FrontEnd > JavaScript' 카테고리의 다른 글
[ JavaScript ] toSorted() , toSpliced() , toReversed() (feat. sort, splice, reverse) (0) | 2023.10.31 |
---|---|
[ JavaScript ] 디자인 패턴 (0) | 2023.10.31 |
[ JavaScript ] 이터러블 iterable (feat. 유사배열 array-like) (0) | 2023.10.29 |
[ JavaScript ] 즉시 실행 함수(IIFE) (feat. 익명함수) (0) | 2023.10.29 |
[ JavaScript ] this (0) | 2023.10.29 |