선요약
map은 리턴 값을 받을 수 있지만, forEach는 리턴 값을 받을 수 없으며 리턴 값은 항상 undefined이다.
공통점
1. Array 관련 메서드들로 ES5 부터 등장하였다.
2. 세 개의 인자를 가지고 호출된다.
- currentValue (배열 원소의 값)
- index (현재 요소의 인덱스)
- array (현재 배열)
차이점
forEach()가 배열 요소마다 한 번씩 주어진 콜백함수를 실행 -> 새로운 배열 X
map()은 배열 내의 모든 요소 각각에 대하여 주어진 콜백함수를 호출한 결과를 모아 새로운 배열을 반환한다
Array.prototype.forEach
- forEach() 메서드는 for문을 대체할 수 있는 함수다. forEach 메서드는 자신의 내부에서 반복문을 실행한다.
- forEach()는 주어진 콜백함수를 배열에 있는 각 요소에 대해 오름차순으로 한 번씩 실행한다. 삭제했거나 초기화하지 않은 인덱스 속성에 대해서는 실행하지 않는다.
- forEach()는 배열을 변형하지 않는다. 콜백함수를 리턴하면서 새로운 배열을 반환하거나 변형할 수 있다.
- forEach 메서드의 반환값은 언제나 undefined다.
const numbers=[1,2,3];
const result = [];
numbers.forEach(x=>result.push(x**2));
console.log(result);
//[1,4,9]*
Array.prototype.map
- map은 콜백함수를 각각의 요소에 대해 한번씩 순서대로 불러 그 함수의 반환값으로 새로운 배열을 만든다.
- 이때 원본 배열은 변경하지 않는다.
- map 메서드에서는 원본 배열의 원소와 일대일 mapping이 진행되기 때문에 원본 배열과 mapping후 배열의 길이는 항상 같다.
- 콜백함수는 배열 값이 들어있는 인덱스에 대해서만 호출된다. 즉, 값이 삭제되거나 아직 값이 할당/정의되지 않은 인덱스에 대해서는 호출되지 않는다.
const numbers=[1,2,3];
const mult = numbers.map(x=>x*2);
console.log(mult)
// [2,4,6];
참고자료
MDN Array.prototype.map()
MDN Array.prototype.forEach()
[JS] forEach()와 map() 차이점
[Javascript] 반복문 for, forEach, map 차이점
forEach(), map(), 무슨 차이가 있을까?
'CS > 프로그래밍' 카테고리의 다른 글
MVC, MVP, MVVM 모델 (0) | 2023.07.09 |
---|---|
await, async (0) | 2023.07.02 |
객체 지향 프로그래밍 (0) | 2023.06.25 |
호이스팅_민희 (0) | 2023.06.19 |
호이스팅 /Edited by.혜경 (0) | 2023.06.19 |