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으로 담기는 것을 확인할 수 있다.