reduce() 메서드는 배열의 각 요소에 대해 주어진 reducer 함수를 실행하고 하나의 결과값을 반환한다.
구문
arr.reduce(callback);
arr.reduce(callback[, initialValue]);
reducer 함수는 네 개의 인자를 가진다.
- 누산기 accumulator (acc)
- 현재 값 (cur)
- 현재 인덱스 (idx)
- 원본 배열 (src)
함수의 반환 값은 accumulator에 할당되고, accumulator는 순회 중 유지된다.
결국 최종 결과는 하나의 값이 되며, 누적 계산의 결과 값을 반환한다.
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15
매개변수
1. callback : 빈 요소를 제외하고, 배열 내 각 요소에 대해 callback 함수를 한번씩 실행하며, 콜백함수는 다음 네 인수를 받는다.
- accumulator : 콜백의 반환값을 누적한다. 콜백의 이전 반환값/콜백의 첫번째 호출이면서 initialValue를 제공한 경우 initialValue 값이다.
- currentValue : 처리할 현재 요소
- currentIndex : 처리할 요소의 인덱스
- array : reduce()를 호출한 배열
2. initialValue : callback의 최초 호출에서 첫 번쨰 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용한다. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생한다. (배열이 비어있는데 initialValue도 제공하지 않으면 TypeError가 발생)
initialValue를 제공하지 않으면, reduce()는 인덱스 1부터 시작해 콜백 함수를 실행하고 첫 번째 인덱스는 건너뛴다. (initialValue를 제공하면 인덱스 0에서 시작)
배열의 요소가 하나 뿐이면서 initialValue를 제공되지 않은 경우, 또는 initialValue는 주어졌으나 배열이 빈 경우엔 그 단독 값을 callback 호출 없이 반환한다. initialValue을 제공하지 않으면 출력 가능한 형식이 세 가지이므로, 보통 초기값을 주는 것이 더 안전.
참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
'Javascript' 카테고리의 다른 글
[JS] 버튼의 포커스이벤트 유지 (활성화 유지) 를 고민해보면서 (0) | 2020.06.18 |
---|---|
자바스크립트 1 22 333 4444 5555... 패턴 (0) | 2020.06.15 |
html 문서간 변수값 주고받기 (0) | 2020.06.10 |
모던 자바스크립트 입문 : 5. 표현식과 연산자 (1) | 2020.06.04 |
[JS] 자바스크립트 :: 의 의미 JavaScript double colon (이중콜론) (0) | 2020.05.21 |