함수형 프로그래밍에는 여러 공통 함수들이 있다.

예시만 보면 파악할 수 있는 것들이 많은데

reduce는 예시만 봐서는 도대체 뭔지 하나도 모르겠다.

그리고 객체 지향 프로그램에서는 reduce와 같은 패턴을 쓸 경우가 많이 없어서 생각해 내기 쉽지 않다.

하지만 가장 기초적인 최대, 최소값을 구하는 경우 대표적으로 reduce 함수를 사용한다.


function getMax(numbers) {
var max = numbers[0];
numbers.forEach(number => {
max = max < number ? number : max;
});
return max;
}


getMax함수는 numbers라는 숫자로 구성된 배열을 넣으면

max값과 다음 배열값을 계속 비교한 후

max값을 반환한다.


배열을 넣었더니 number로 줄어든 값을 반환했다.

reduce라는 것은 이렇게 뭔가 나열된 것을 하나로 줄여서 반환한다는 뜻이다.


그리고 reduce는 함수를 인수로 받는다.

그리고 이 함수는 이항함수이고 max와 number가 인수가 된다.

자바스크립트는 첫번째 인자에 reduce값을 반환한다.

이를 람다식으로 표현하면 아래와 같다.

(max, number) => max

이게 기본적으로 reduce에 들어가는 함수 형식이다.

return값만 필요한 알고리즘으로 구현해 주면 된다.


var max = numbers.reduce( (max, number) => {
max = max < number ? number : max;
return max;
});


아래와 같이 더 줄여 쓸 수 있다.

var max = numbers.reduce( (max, number) => max < number ? number : max);


추가로 reduce를 사용할 때 초기값 설정이 필요한 경우가 있다.

javascript에서는 reduce의 두번째 인자가 초기값인데

reduce( function, initialValue) 다.

function의 두번째 인자랑 헷갈리지 말긴 바란다.

초기화된 객체가 필요한 경우

reduce( function, {} )

이렇게 해주면 된다.


'javascript' 카테고리의 다른 글

callback 패턴 함수를 await로 쓰는 방법  (0) 2018.05.01
nodeJs require  (0) 2018.04.13
promise 대신 async, await를 사용하자  (0) 2018.03.22
let의 필요성  (0) 2018.03.20
async function 과 await  (0) 2018.03.10

+ Recent posts