reduce 메서드는 네 개의 인자를 가진다.
누산기 (acc), 현재 값 (cur), 현재 인덱스 (idx), 원본 배열 (src)
reduce 함수의 반환 값은 누산기에 할당되고, 누산기는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 된다.
arr.reduce(callback[, initialValue])
callback
배열의 각 요소에 대해 실행할 함수이다. 위에서 말한 네 가지 인수를 넣을 수 있다.
1) accumulator
누산기는 콜백의 반환값을 누적한다. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값을 반영한다.
2) currentValue
처리할 현재 요소
3) currentIndex (생략가능)
처리할 현재 요소의 인덱스를 의미한다. initialValue를 제공한 경우 0, 아니면 1부터 시작한다.
4) array (생략가능)
reduce()를 호출한 배열
initialValue (생략가능)
callback의 최초 호출에서 첫 번째 인수에 제공하는 값이다. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용한다.
빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생하므로 초기값을 작성해주는 것이 좋다.
const numbers = [1, 2, 3, 4];
numbers.reduce((누산값, 현재요소값, 현재요소의index, 현재배열) => {
return 다음누산값;
}, 초기누산값);
reduce를 이용하여 배열의 값을 모두 더할 수 있다.
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, cur) => {
return cur + acc;
}, 0);
console.log(sum); // 10
알고리즘을 풀 때 참고할만한 방법이라 작성!
const array = ['a', 'b', 'a', 'a', 'b'];
const result = array.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
// 객체에서 cur key값을 찾아 value값이 있으면 그 value에 1을 더하고, 없다면 0을 할당하고 거기에 1을 더해준다.
return acc;
}, {}); // 초기값을 {} 객체로 설정
console.log('result',result); // 'result' { a: 3, b: 2 }
참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
https://bigtop.tistory.com/69