map()함수는 배열의 각각의 원소에 함수를 적용하는것이라면
reduce()함수는 배열의 각 배열들을 순서대로 함수를 적용하는것입니다.
예를 들어 1~5까지의 배열이 있을때 합을 구하고 싶다면 다음과 같습니다.
[1, 2, 3, 4, 5].reduce( (x, y) => x+y, 0); // 15
위의 소스는 (((((0+1) + 2) + 3) + 4) +5) 와 같이 동작합니다.
그렇습니다. 함수중에서 가장 피곤한!! 재귀함수와 비슷합니다. (재귀함수는 수학식을 코딩하기에 알맞지만 디버깅과 소스 분석이 어려운 단점이 있지요.)
일명 fold 함수라고도 하는 고차함수입니다.
reduce도 고차함수에 속하는 것으로 아래와 같이 움직이게 됩니다.
reduce에 의해 함수를 마치면 리턴은 하나가 됩니다. (map()은 리스트가 반환됩니다.)
아래는 리스트의 모든 데이터를 하나의 스트링으로 만드는 소스 입니다.
function appendCurrent (previousValue, currentValue) {
return previousValue + "::" + currentValue;
}
var elements = ["abc", "def", 123, 456];
var result = elements.reduce(appendCurrent);
console.log(result); // "abc::def::123::456"
reduce()는 보통 리스트내의 계산 부분(통계 / 합) 부분에 많이 쓰입니다~
'web > javascript' 카테고리의 다른 글
javascript 의 모듈 제공 방법 (0) | 2018.09.05 |
---|---|
js regexp wrong results? (0) | 2018.05.03 |
overflow-x 된 DOM에서 마우스 휠로 좌우스크롤 움직이기 (0) | 2016.06.29 |
javascrpt map (0) | 2016.06.09 |