IT/JavsScript
Map() 매서드 이해하기
라임웨일
2021. 3. 31. 13:26
반응형
map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
const array1 = [1, 4, 9, 16];
const map1 = array1.map(x => x * 2);
console.log(map1); // 결과: Array [2, 8, 18, 32]
위의 코드를 한번 보면 배열에 들어있는 값을 화살표 함수를 이용하여 배열의 값을 매개변수로 받아서 각 배열의 값을 반복문을 돌며 값을 출력하는 코드입니다.
map은 callback 함수를 각각의 요소에 대해 한번씩 순서대로 불러 그 함수의 반환 값으로 새로운 배열을 만듭니다. callback 함수는 (undefined도 포함해서) 배열 값이 들어있는 인덱스에 대해서만 호출됩니다. 즉, 값이 삭제되거나 아직 값이 할당/정의되지 않은 인덱스에 대해서는 호출되지 않습니다.
thisArg 매개변수가 map에 전달된 경우 callback 함수의 this값으로 사용됩니다. 그 외의 경우 undefined값이 this 값으로 사용됩니다. callback 함수에서 최종적으로 볼 수 있는 this 값은 함수 내 this를 정하는 일반적인 규칙에 따라 결정됩니다. map은 호출한 배열의 값을 변형하지 않습니다. 단, callback 함수에 의해서 변형될 수는 있습니다.
이 map 매서드를 사용하여 기존 값은 변경하지 않고 새로운 변수에 변경된 값을 사용할 수 있습니다. 자바스크립트의 데이터 불변성에도 아주 적합한 코드입니다.
let numbers = [1, 4, 9];
let doubles = numbers.map(function(num) {
return num * 2;
});
// numbers : [1, 4, 9] 변하지 않음.
// doubles : [2, 8, 18]
map 매서드는 배열뿐만 아니라 객채(Object)도 반환할 수 있습니다.
let kvArray = [{key:1, value:10},
{key:2, value:20},
{key:3, value: 30}];
let reformattedArray = kvArray.map(function(obj){
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
// reformattedArray는 [{1:10}, {2:20}, {3:30}]
// kvArray는 변하지 않음.
// [{key:1, value:10},
// {key:2, value:20},
// {key:3, value: 30}]
반응형