JavaScript

[함수형 프로그래밍] map

JEE-JEEE 2024. 2. 21. 12:52

map 함수는 자바에서 쓰이는 것과 같다. 다른 점이 있다면, 자바에서는 무조건 선언과 초기화를 해야 하지만 그렇지 않다는 것 정도? 조금 다른 점이 있다면, map을 사용하는 경우 

 

Map()을 사용하면, 객체 배열을 순회해서 지정된 함수를 적용해 반환, 새로운 배열에 적용하게 된다.

예제를 보자면 다음과 같이 사용 가능하다

function mpnFn(numbers){
    const item_01 = numbers.map(function(number){return number * number;});
    const item_02 = numbers.map(number => number * number);
    const item_03 = [];
    for(const a of L.map(a => a*a, numbers)){
        item.push(a);
    }
    return item;
}

function f7(list){
    console.log(mpnFn(list));
}

f7([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

 

세가지의 사용법을 나누어서 실행했다.

1과 2는 자바스크립트 기본 문법 내의 map을 사용했고, 마지막은 jx를 통해 사용했다.

 

1의 수식은 배열.map(function(함수명){return 수식;}); 으로 이루어져있다. function으로 배열에서 사용될 개별 함수를 지정하고, 리턴 구역에서 수식을 지정하여 해당 값을 map에 리턴한다.

 

2의 수식은 1의 식을 화살표 함수로 축약했다. function()과 return값을 => 으로 축약해 간결하게 만들었다.

 

3의 수식은 우선 배열을 정의하고, L.map을 통하여 a에 해당하는 값을 item이라는 함수에 push하는 형태로 만들었다. 셋 다 같은 값을 성공적으로 가져온다.

 

function f2(limit, list){
    let acc = 0;
    for(const a of L.filter(a => a % 2, list)){
        const b = a * a;
        acc += b;
        console.log(b);
        if(--limit == 0) break;
    }
 }

 

그럼 이제 전에 filter를 사용하면서 이 코드가 나왔었다.

여기에서, 필터가 된 값을 for문 내에서 a * a = b 라는 수식을 저장했는데, 이것을 for문 내에서 해결하는 것으로 코드를 정리해보자.

 

// befor
function f2(limit, list){
    let acc = 0;
    for(const a of L.filter(a => a % 2, list)){
        const b = a * a;
        acc += b;
        console.log(b);
        if(--limit == 0) break;
    }
 }
 
 
 //after
function f3(limit, list){
    let acc = 0;
    for(const a of L.map(a => a*a, L.filter(a => a % 2, list))){
        acc += a;
        if(--limit == 0) break;
    }
    console.log(acc);
 }

 

이렇게 한다면, 전에 const b = a * a 였던 부분이 for문 내로 옮겨가면서 map으로 담기는 것을 확인할 수 있다.