forEach(), map(), 무슨 차이가 있을까?

dev.dave·2023년 8월 30일

Javascript

목록 보기
166/167

출처 : https://velog.io/@duckgus/forEach-map-%EB%AC%B4%EC%8A%A8-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C

사건의 발단
자바스크립트에서 배열 내장 함수를 배우던 도중 이상한 점을 발견했습니다.

forEach()와 map()에 대해 배우고있었는데, 아래 코드를 한번 보시죠.

const arr = [1, 2, 3, 4, 5];
const newArr = arr.map((item) => {
return item * 2;
});

console.log(newArr); // [ 2, 4, 6, 8, 10 ]
원래 배열에 있던 숫자에 곱하기 2를 해서 반환하는 코드입니다. 특별할 것이 없습니다.

const arr = [1, 2, 3, 4, 5];
const newArr = arr.map((item) => item * 2);

console.log(newArr); // [ 2, 4, 6, 8, 10 ]
더 줄여서 이렇게 작성할 수도 있습니다.
다만 여기서 map을 forEach로 바꾸게 될 경우 문제가 발생합니다.

const arr = [1, 2, 3, 4, 5];
const newArr = arr.forEach((item) => {
return item * 2;
});

console.log(newArr); // undefined
아까 작성했던 코드에서 map을 forEach로 바꿨을 뿐입니다. undefined가 출력됩니다.

const arr = [1, 2, 3, 4, 5];
const newArr = arr.forEach((item) => item * 2);

console.log(newArr); // undefined
더 줄여서 작성했던 코드도 똑같이 변경했을 때 같은 결과를 반환합니다. 그렇다면 forEach()는 어떻게 작성해야 정상적인 결과를 얻을 수 있을까요?

const arr = [1, 2, 3, 4, 5];
const newArr = [];

arr.forEach((item) => newArr.push(item * 2));

console.log(newArr); // [ 2, 4, 6, 8, 10 ]
이렇게 별도로 한 줄을 더 작성해주어야 합니다. push라는 함수도 사용해주어야 하고, 따로 한 줄을 더 적어주어야 한다니 약간 번거롭다는 느낌이 드네요. 어째서 이런 차이점이 발생하게 되는걸까요?

forEach()와 map()의 차이
구글링을 열심히 해봤습니다.

[JS] forEach()와 map() 차이점

forEach()와 map()의 차이점

도움이 된 두 블로그입니다. 두 블로그를 종합하여 정리하자면, map은 리턴값을 받을 수 있지만 forEach는 리턴값을 받을 수 없으며 리턴값은 항상 undefined입니다.

왜인지는 아무리 찾아봐도 설명이 제대로 되어있는 곳이 없지만..

많은 사람들이 forEach는 단순히 반복문 코드를 줄이기 위해 사용하는 코드이고, map의 경우 배열의 각 요소를 다른 값으로 바꾼 새로운 배열을 생성하기 위한 배열 내장 함수라는 말이 있습니다.

이 말 자체가 잘 이해가 되진 않네요.

[Javascript] Array Method - for each 와 map함수의 차이

여기 블로그를 보니 나름 머리속에서 정리가 되는 것 같습니다.

forEach는 콜백함수를 인자로 받고 각 요소에 콜백함수를 실행시킨다. (반환X)

map은 콜백함수를 인자로 받고 각 요소에 콜백함수를 실행시킨 새로운 배열을 반환한다.

정도로 정리할 수 있을 것 같습니다. 반환값이 있고없고를 고려한다면 배열의 데이터를 변경할때에는 map을 사용하는 것이 적절해보입니다.

profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글