처음 reduce를 보고 직관적으로 이해가 가지 않았다.
하지만 구글엔 좋은 선생님들이 많았다.
이런저런 예시를 많이 보고난 이후에야 비로소 어떤 메소드인지 파악하게 됐다.
mdn 만 봐서는 직관적으로 이해가 가질 않았다.
이것저것 찾아보면서 내가 이해할 수 있는 쉬운 언어로 변환한 결과,
배열의 각 인덱스 값을 탐색하는 반복문 정도(..?) 로 이해가 된다.
reduce()는 다음과 같이 사용한다.
배열.reduce( (누적값, 현잿값, 인덱스 , 요소) => { return 결과 } , 초기값 )
여기서 파라미터는 크게는 빨간색으로 표시한 1. 함수와 파랑색으로 표시한 2. 초기값으로 나뉜다.
중요한 점은 첫번째 파라미터 1. 함수 가 말그대로 함수 형태여야 한다는 것이다.
두번째 2. 초기값 은 특정 숫자가 될 수도 있고, 배열이나 객체, 함수가 될 수도 있다.
여기서 1. 함수 부분을 리듀서 함수라고 부르는데,
총 4개의 파라미터를 받는다. 이걸 또 한번 나눠보면,
배열.reduce( (누적값, 현잿값 , 인덱스 , 요소) => { return 결과 }, 초기값 )
빨간색으로 표시한 누적값, 현잿값 과
초록색으로 표시한 인덱스, 요소 로 나뉜다.
누적값, 현잿값은 필수 파라미터다.
인덱스, 요소은 옵션이다.
조금 구조가 복잡해서, 예제를 보고 이해하는 것이 빨랐다.
function sum(...arr) {
return arr.reduce ((prev, cur) => {
return prev + cur;
}, 0);
}
sum (1, 2, 3, 4); // 10
차근차근 보자..
sum함수에 인자를 받아서 배열로 변환시켜준다. ex) 1, 2, 3, 4 -> [ 1, 2, 3, 4 ]
[1,2,3,4].reduce를 실행한다.
첫번째 반복(탐색)시 :
prev
= 초기값으로 설정해 놓은 0
cur
= [ 1, 2, 3, 4 ] 의 0번째 인덱스 값
인 1
prev
+ cur
= 0 + 1 = 1
두번째 반복(탐색)시 :
prev
= 첫번째 반복으로 누적된 값 1
cur
= [ 1, 2, 3, 4 ] 의 1번째 인덱스 값
인 2
prev
+ cur
= 1 + 2 = 3
세번째 반복(탐색)시 :
prev
= 두번째 반복으로 누적된 값 3
cur
= [ 1, 2, 3, 4 ] 의 2번째 인덱스 값
인 3
prev
+ cur
= 3 + 3 = 6
네번째 반복(탐색)시 :
prev
= 세번째 반복으로 누적된 값 6
cur
= [ 1, 2, 3, 4 ] 의 2번째 인덱스 값
인 4
prev
+ cur
= 6 + 4 = 10