Javascript Map 정복하기

Javascript Map 정복하기

Map

볼 때 마다 이해가 안되는 녀석이다. 이론적으로는 이해가 되는데 응용이 조금이라도 첨가되면 바로 뇌정지가 와버린다. 이번 기회에 응용까지 싹다 끝내버리려고 한다.

map은 forEach와 마찬가지로 Array의 각 요소를 순회하며 callback 함수를 실행합니다. 다만, callback에서 return 되는 값을 배열로 만들어냅니다.

기본적인 사용법

    const arr = [0, 1, 2, 3];

    let squaredElement = arr.map(function(element){
        return element * element;
    });

    console.log(sqauredElement); // [0, 1, 4, 9]

이것이 map의 기본 사용 예이다. 배열 원소의 제곱수를 얻기위해 function을 넣어주고 map은 그 결과들은 배열로 return 해준다. function의 매개변수는 기본적으로 function(value(현재 element), index) 로 이루어져 있다.

다음 코드는 금일 알고리즘 1문제를 풀던 중 도저히 안풀려서 슬쩍 본 솔루션이다.

    function solution(numbers) {
    var answer = numbers.map(v=>v+'') // 이 부분
                        .sort((a,b) => (b+a)*1 - (a+b)*1)
                        .join('');
    return answer[0]==='0'?'0':answer;    
    }

    var numbers= [3, 30, 34, 5, 9]
    console.log( solution(numbers) )

3번째 줄에서 map()을 사용했는데 저 부분이 이해가 안갔었다. 설명에는 배열 요소들을 문자열로 바꿔준 후 그 결과값을 배열로 return을 받는다는데, 그냥 그렇다고 알아야 하는지 무언가 있는건지 찾아봐도 잘 안나와서 모르겠다. 그럼 굳이 v+''보다는 String(v)가 더 직관적이지 않나? (확인해보니 됨) 아무튼 배열이 주를 이루는 알고리즘 문제 특성상 map()은 숨쉬듯 다룰 수 있을 정도가 되어야 한다는걸 다시 한 번 느꼈다.

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.