ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • map()
    JavaScript/입 속의 검은 잎 2022. 9. 25. 15:26

    사용빈도가 대단히 높은 메서드이다.

    배열 요소 전체를 대상으로 함수를 호출하고, 함수 호출 결과를 배열로 반환한다.

     

    let result = arr.map(function(item, index, array) {
      // 요소 대신 새로운 값을 반환합니다.
    });

    1. 배열의 각 값에 더하고 곱하고 제곱근에...

    const arr = [1, 2, 3];
    
    // res와 res1과 res2는 모두 같다.
    const res = [];
    for(let i=0; i<arr.length; i++){
        res.push(arr[i]*2)
    };
    console.log(res)
    
    
    const res1 = arr.map((value) => {
        return value*2
    });
    console.log(res1)
    
    const res2 = arr.map((value) => value*2);
    console.log(res2)
    
    //인수로 value, index 넣어도 된다.
    const res3 = arr.map((value, index) => value*index);
    console.log(res3)
    
    //다른 메서드를 안에 넣어도 된다.
    const arr_sqrt = [4, 9, 16, 25, 36];
    const res4 = arr_sqrt.map(Math.sqrt);
    console.log(res4);
    
    //화살표로 하면 쉽다.
    const arr_num = [1,2,3,4,5,6,7,8,9];
    const res5 = arr_num.map(number => number+2)
    console.log(res5)
    
    // 함수 안에서 선언해도 된다.
    const arr_num2 = [1,2,3,4,5,6,7,8,9];
    const res6 = arr_num2.map(function(v){
        return v * 2;
    });
    console.log(res6);
    
    //함수 따로 선언해도 된다.
    const arr_num3 = [1,2,3,4,5,6,7,8,9];
    
    function 곱하기(v){
        return v*2;
    };
    
    const res7 = arr_num3.map(곱하기);

     

    추가예시1) 길이로 반환.

    let lengths = ["Bilbo", "Gandalf", "Nazgul"].map(item => item.length);
    alert(lengths); // 5,7,6

     

    추가예시2) 제곱근

    var numbers = [1, 4, 9];
    var roots = numbers.map(Math.sqrt);
    // roots는 [1, 2, 3]
    // numbers는 그대로 [1, 4, 9]

    2.배열 안의 key:value 값 수정하고 다른 객체에 할당

    // return을 넣지 않으면, 딕셔너리라고 쓴 {id:x.id}의 중괄호가 map 함수의 중괄호로 인식되어서 
    // undefined가 출력된다.
    const arr = [{id:1, name: 'john'}, {id:2, name: 'james'}]
    const result = arr.map((x) => {id:x.id});
    console.log(result)
    
    const arr2 = [{id:1, name: 'john'}, {id:2, name: 'james'}]
    const result2 = arr.map((x) => {
        return {id:x.name}
    });
    console.log(result2)
    
    //새 배열에 name만 할당
    const result3 = arr.map((x) => x.name);
    console.log(result3);
    
    //할당만 하는걸 함수처럼 쓰면 undefined 출력
    const result4 = arr.map((x) => {x.name});
    console.log(result4);

     

    추가예시1) 배열 속 객체 재구성

    var kvArray = [{key:1, value:10},
                   {key:2, value:20},
                   {key:3, value: 30}];
    
    var 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}]

     

     

    추가예시2) 주의깊게 볼 독특한 활용들1 : 나머지가 0인 것만 배열에 넣어줘.

    function solution(arr, divisor) {
        var answer = [];
        arr.map((o) => {
            o % divisor === 0 && answer.push(o);
        })
        
        // 2~5줄은 var answer = arr.filter(el => el % divisor === 0) 와 같다.
        
        return answer.length ? answer.sort((a, b) => a - b) : [-1];
    
    }

    추가예시3) 주의 깊게 볼 독특한 활용들2 : 행렬 덧셈

    function sumMatrix(A,B){
        return A.map((a,i) => a.map((b, j) => b + B[i][j]));
    }
    
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    console.log(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))

     

    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map

     

    Array.prototype.map() - JavaScript | MDN

    map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.

    developer.mozilla.org

     

Designed by Tistory.