map vs forEach

강재민·2023년 8월 24일
post-thumbnail

*출처 콥노트

Array.prototype.map()

map 메서드는 매개 변수로 함수를 받는다. 그런 다음 각 요소에 매개 변수로 받은 함수를 적용하고 완전히 새로운 배열로 반환하게 된다.

const arr = [1,2,3];
const arr2 = arr.map(x => x*2);

console.log(arr); // [1,2,3]
console.log(arr2); // [2,4,6]

Array.prototype.forEach()

forEach 메서드는 매개 변수로 함수를 받는다. 그런 다음 각 요소에 매개 변수로 받은 함수를 적용하고 기본적으로 undefined를 반환한다.

const arr = [1,2,3];
const arr2 = arr.forEach(x => x*2);

console.log(arr); // [1,2,3]
console.log(arr2); // undefined

return

map은 매개변수로 받은 함수를 적용된 새배열을 반환하지만, forEach는 undefined를 반환한다.

체이닝

map 메서드의 경우 새배열이 반환되기 때문에 다른 배열관련 메서드로 체이닝이 가능하다.

const arr = [1,2,3];
const arr2 = arr.map(x => x*2).filter(x => x / 2 === 2);
console.log(arr2); // [4]

arr.forEach(x => x*2).filter(x => x / 2 === 2);
// Uncaught TypeError: Cannot read property 'filter' of undefined

원본 배열의 불변성

두 메서드 모두 원본 배열을 수정하지는 않는다. 하지만 매개 변수로 넣어준 콜백함수에서 직접 원본 배열을 수정한다면 두 메서드 모두 원본 배열이 수정된다.

arr.forEach(x => x*2); // arr => [1,2,3]
arr.map(x => x*2); // arr => [1,2,3]
 
 // ---------------------
 
arr.map((x,i) => arr[i] = x*2); // arr => [2,4,6];
// or
arr.forEach((x,i) => arr[i] = x*2); // arr => [2,4,6];
profile
말많은 개발자의 111강

0개의 댓글