forEach() vs map()forEach()const numbers = [1, 2, 3, 4];
numbers.forEach((num) => { console.log(num * 2); });
목적
- 배열의 각 요소에 대해 주어진 함수를 실행한다.
forEach는 요소를 변형하거나 side effect(사이드 이펙트/부수효과) 를 발생시키는 작업(예: DOM 조작, 콘솔 출력)을 수행할 때 주로 사용된다.
반환 값
forEach는undefined를 반환한다.- 즉, 배열을 순회하며 작업을 수행할 뿐, 새로운 배열을 반환하지 않는다는 뜻이다.
변형 가능성
- 원본 배열은 변형되지 않으며,
forEach안에서 수정하지 않는 한 원래 배열은 그대로 유지된다.
map()const numbers = [1, 2, 3, 4];
const doubled = numbers.map((num) => num * 2); console.log(doubled); // [2, 4, 6, 8]
목적
- 배열의 각 요소에 대해 주어진 함수를 실행하고, 그 결과를 기반으로 새로운 배열을 만든다.
map은 주로 배열을 변환(transform)하여 새로운 배열을 얻고자 할 때 사용된다.
반환 값
map은 새로운 배열을 반환한다.- 이 배열은 원본 배열의 각 요소에 대해 주어진 함수를 실행한 결과로 이루어진다.
변형 가능성
- 원본 배열은 변형되지 않으며, 새로운 배열이 생성된다.
참고
- map은 새로운 배열을 만들고 반환하기 만들기 때문에, 메모리를 할당한다.
- 성능 면에서 map()이 forEach()보다 빨라 유리하다고 한다.
반환 값:
forEach는undefined를 반환하고, 배열을 순회하며 주어진 작업을 수행하는 데 그친다.map은 주어진 함수를 실행한 결과로 이루어진 새로운 배열을 반환한다.
사용 목적:
forEach는 주로 배열의 각 요소에 대해 작업을 수행하기 위한 목적으로 사용된다(부수효과).map은 배열을 변환하여 새로운 배열을 얻고자 할 때 사용된다.
원본 배열:
- 두 메서드 모두 원본 배열을 변경하지 않는다.
- 그러나
forEach에서 배열의 요소를 직접 수정하는 코드를 작성할 경우 원본 배열이 변경될 수 있다.
forEach 및 부수효과forEachforEach는 배열의 각 요소를 한 번씩 순회하면서 주어진 함수를 실행하는 메서드라고 위에서 언급했다.forEach는 작업을 실행할 뿐이라는 것이다.console.log).forEach와 부수효과forEach는 주로 부수효과를 발생시키기 위해 사용된다고 했다. forEach를 사용다.const numbers = [1, 2, 3, 4];
let sum = 0;
numbers.forEach((num) => {
sum += num; // 부수효과: sum이라는 외부 변수를 수정하고 있음
});
console.log(sum); // 10
forEach는 배열의 각 요소를 sum에 더하는 작업을 수행한다.sum이라는 외부 변수의 값을 변경하는 것이 부수효과이다.forEach 자체는 값을 반환하지 않지만, sum의 값을 변화시키는 외부 효과를 발생시킨다.forEach는 특정 값을 반환하지 않기 때문에, 특정 변수의 상태값을 변경하기 위해서는 부수효과를 사용한다는 점이 이 단락의 핵심이라 할 수 있다.