reduce()
배열의 각 요소에 대해 주어진 reduce() 함수를 실행하고, 하나의 결과값을 반환한다.
arr.reduce(callback[, initialValue])
• initialValue
(Optional) : callback의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류 발생
ex) 모든 배열의 합을 구하는 예제
const arr = [1, 2, 3, 4, 5];
const result = arr.reduce((acc, cur, idx) => { return acc += cur; }, 0);
console.log(result); // 15
// 뒤에 initialValue값이 0이라 , 초기값은 0 이 되고 배열의 첫번째 요소부터 acc에 자신의 값인
// 를 더해간다.
const arr2 = [1, 2, 3, 4, 5];
const result2 = arr2.reduce((acc, cur, idx) => { return acc += cur; }, 10);
console.log(result2); // 25
// 만약 뒤에 initialValue라면 , 초기값은 10이 되고 배열의 첫번째 요소부터 더해가므로
// 10 + 1 + 2 + 3 + 4 + 5 = 25 가 된다.
ex) 배열에서 개수를 카운터 하는 예제
const numbers = [2, -5, -123, 59, -5480, 24, 0, -69, 349, 3];
const result = numbers.reduce((acc, cur, idx) => {
if(cur < 0){
// 처리할 현재 요소가 음수일 경우
acc[0]++;
}
else if(cur > 0){
// 처리할 현재 요소가 양수일 경우
acc[1]++;
}
return acc;
}, [0,0]);
console.log(result); // [4, 5]
음수와 양수의 개수를 각각 카운트하기 위해 initialValue를 [0,0]로 설정했다. initialValue[0]에는 음수의 개수를, initialValue[1]에는 양수의 개수를 카운트한다고 하자.
첫 번째 호출 시, acc의 값은 initialValue의 값으로 설정되므로 초기 acc 값은 [0,0]이다.
배열 numbers의 모든 요소에 대해 reduce() 함수를 실행한 결과는 다음과 같다.
idx | cur | acc |
---|---|---|
0 | 2 | [0, 1] |
1 | -5 | [1, 1] |
2 | -123 | [2, 1] |
3 | 59 | [2, 2] |
4 | -5480 | [3, 2] |
5 | 24 | [3, 3] |
6 | 0 | [3, 3] |
7 | -69 | [4, 3] |
8 | 349 | [4, 4] |
9 | 3 | [4, 5] |