들어가며

파이썬에서 map() 함수를 너무 애용했기 때문에 자바스크립트에서도 map 함수가 있는지 궁금했습니다. 찾아보니 자바스크립트에서도 map 메소드가 역시나 있었고 많이 쓰이더라고요. “자바스크립트 map 메소드”는 파이썬에서와 마찬가지로 원본 배열의 각 요소에 제공된 함수를 적용하여 새 배열을 만드는데 사용할 수 있는 메서드입니다.

그리고 제목에서 보셨다시피 배열을 다루기 위한 많은 메스드와 연계해서 많이 쓰이는 배열의 콤보 기술 중 하나입니다.

기본 이지만 정말 강력한 map 메소드…! 이번 포스트에서는 map 함수는 무엇인지 그리고 어떻게 활용할 수 있는지에 대해서 정리해보았습니다.

자바스크립트 map 메소드 기본 사용법

map() 함수는 원본 데이터를 변경하지 않고 배열의 데이터를 변환하는 데 유용합니다.

기본적인 사용법은 다음과 같습니다.

const newArray = originalArray.map(callback(element, [index], [array]));

기존의 배열은 수정하지 않는 것에 유의해주세요. 대신 각 요소에 함수를 적용한 결과가 포함된 새 배열을 반환합니다.

배열의 요소들을 제곱으로 만든다고 하면 map 메소드를 활용해서 아래와 같이 간단히 구현할 수 있습니다.

const numbers = [1, 2, 3, 4];

const squaredNumbers = numbers.map(function (num) {
  return num * num;
});

console.log(squaredNumbers); // [1, 4, 9, 16]

화살표 함수를 사용한 map 메소드

map 메소드 내의 콜백 함수는 function(){}을 사용하지 않고 간단하게 화살표 함수로 표현할 수도 있습니다.

인자를 요소 하나만 쓰는 경우에는 ()을 생략할 수 있기 때문에 arr.map(el => el * el); 처럼 사용할 수 있습니다.

화살표 함수에 대한 설명은 아래 글을 참고해주세요

const numbers = [1, 2, 3, 4];

const squaredNumbers = numbers.map(num => num * num);

console.log(squaredNumbers); //[1, 4, 9, 16]
화살표 함수

map 콜백 함수의 index 인자

index 인자를 받아서 아래와 같이 숫자로 된 추가 연산 작업을 할 수 있습니다.

아래 코드에서는 요일을 받아서 Day [숫자]를 붙여주는 작업을 진행 했습니다.

index 인자를 활용함으로써 파이썬의 enumerate 처럼 사용할 수 있습니다.

const daysOfWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];

const indexedDays = daysOfWeek.map((day, index) => {
    return `${day} (Day ${index + 1})`;
});

console.log(indexedDays);
// ['Monday (Day 1)','Tuesday (Day 2)','Wednesday (Day 3)','Thursday (Day 4)','Friday (Day 5)','Saturday (Day 6)','Sunday (Day 7)']

map 콜백 함수의 array 인자

array 인자를 받아서 아래와 같이 배열의 속성을 배열의 요소에 적용하는 코드를 작성 할 수 있습니다.

const numbers = [1, 2, 3, 4, 5];

// Multiply each element of the array by its index
const newArray = numbers.map((element, _, array) => {
    return element * array.length;
});

console.log(newArray); // [5, 10, 15, 20, 25]

index 인자는 필요 없고 array는 필요한 경우

map 메소드에서 element와 array 인자만 사용하고 index 인자가 필요 없는 경우는 _ 을 사용해서 생략 할 수 있습니다.

const newArray = originalArray.map((element, _, array) => {
    // Your code here
});

_(밑줄)이 index 매개변수의 자리 표시자로 사용되어 해당 매개변수가 무시되고 콜백 함수에서 사용되지 않음을 나타냅니다.

자바스크립트 map 메소드 사용 예

map 메소드는 정말 무궁무진하게 활용 될 수 있습니다. 아래 사용 예는 map 메소드를 활용할 수 있는 몇 가지 사례 입니다.

데이터 변환

const names = ["Alice", "Bob", "Charlie"];
const nameLengths = names.map(name => name.length);
console.log(nameLengths); // [5, 3, 7]

데이터 타입 변환

const strings = ["1", "2", "3"];
const numbers = strings.map(str => parseInt(str));
console.log(numbers); // [1, 2, 3]

객체 정보를 배열로 변환

const users = [
  { name: "Alice", age: 30 },
  { name: "Bob", age: 25 },
];

const userNames = users.map(user => user.name);
console.log(userNames); // ["Alice", "Bob"]

다른 배열 메소드와 연결

아래 코드는 배열 숫자 중 짝수만 제곱하는 코드 입니다. filter() 메소드와 연결해서 사용하는 것에 주목해주세요.

const numbers = [1, 2, 3, 4];
const squaredEvenNumbers = numbers.filter(num => num % 2 === 0).map(num => num * num);
console.log(squaredEvenNumbers); // [4, 16]

문자열 변환

문자열에 ‘A’가 있다면 ‘B’로 바꾸고 아니면 ‘A’로 바꾸는 기능을 아래 와 같이 구현할 수 있습니다.

문자열에서 replaceAll() 메소드를 사용할 수도 있지만 배열로 만든 뒤 다음과 같이 map 함수를 활용해서 기능을 구현할 수도 있습니다.

const solution = (myString, pat) => [...myString].map(v => v === 'A' ? 'B' : 'A').join('')

확산연사자를 활용 문자열 -> 배열

map 함수와 삼항 연산자를 활용해서 각 요소를 검사 후 변환

”join() 함수를 통해서 배열 -> 문자열

확산 연산자란?

마치며

파이썬의 map 함수와 마찬가지로 자바스크립트 map 메소드 또한 굉장히 유용한 기능인 것 같습니다.

콜백 함수의 index인자와 array 인자를 활용하여 추가적인 도움을 주는 게 인상적이였습니다.

파이썬은 map 함수 사용 시 map 객체를 반환하는 반면 자바스크립트에서는 바로 배열로 반환 해주는 게 사용 측면에서는 편리하다고 느껴졌습니다.

그 밖에 파이썬 map 함수와 유사하지만 재미있는 차이점 들이 있는데요.

해당 내용은 시간이 되면 정리하면 재밌을 것 같습니다.

참고하면 좋은 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


목차