reduce() 메소드란?
reduce() 메소드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환한다.
reduce() 메소드 구문
// reduce - 기본 문법
arr.reduce(callback[, initialValue])
// reduce - 상세한 버전
const numbers = [1,2,3,4];
numbers.reduce((누산값, 현재요소값, 현재요소의index, 현재배열) =>{
return 다음누산값;
}, 초기누산값);
매개변수
1. callback
Reduce()는 빈 요소를 제외하고 배열 내에 존재하는 각 요소에 대해 callback함수를 한 번씩 실행하는데, 콜백 함수는 다음의 네 인수를 받는다.
- 누산기 (accumulator)
- 누산기는 콜백의 반환값을 누적한다.
- 콜백의 이전 반환값 또는 콜백의 첫 번째 호출이며, initialValue를 제공한 경우 initialValue의 값이다. - 현재 값 (currentValue)
- 현재 처리할 요소 - 현재 인덱스 (currentIndex) - optional
- 현재 처리할 요소의 인덱스
- initialValue를 제공한 경우 0, 아니면 1부터 시작 - array(array/src) - optional
- reduce() 메소드를 호출한 현재 배열/원본 배열
2. initialValue - optional
callback의 최초 호출에서 첫 번째 인수에 제공하는 값. initialValue를 설정했느냐 안했느냐에 따라 콜백의 최초 호출 시의 accumulator와 currentValue가 달라진다.
- initialValue를 설정 한 경우
| callback | accumulator | currentValue | currentIndex |
| 1번째 호출 | initialValue | 배열의 첫번째 요소 | 0 |
- initialValue를 설정하지 않은 경우
| callback | accumulator | currentValue | currentIndex |
| 1번째 호출 | 배열의 첫번째 요소 | 배열의 두번째 요소 | 1 |
코드로 구문 이해해보기
1. initialValue 설정 X
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((누산기, 현재값, 배열요소순서) => {
console.log(`${배열요소순서}번째 콜백함수`)
console.log(`누산기: ${누산기}`);
console.log(`현재값: ${현재값}`);
return 누산기 + 현재값;
},);
console.log(`-----------`);
console.log(`sum: ${sum}`);

2. initialValue 설정 O
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((누산기, 현재값, 배열요소순서) => {
console.log(`${배열요소순서}번째 콜백함수`)
console.log(`누산기: ${누산기}`);
console.log(`현재값: ${현재값}`);
return 누산기 + 현재값;
}, 10);
console.log(`-----------`);
console.log(`sum: ${sum}`);

- 위 두 예문에서 볼 수 있듯이 initialValue를 설정하기 않으면 reduce()는 인덱스 1부터 시작해 콜백 함수를 실행하고 0번째 인덱스는 건너띈다. 따라서 배열의 길이 -1만큼 콜백 함수가 동작하게 된다.
- initialValue를 제공하면 인덱스 0에서 시작하므로 모든 배열들이 콜백 함수의 동작을 적용 받을 수 있도록 initialValue는 생략하지 않는 것이 안전하므로 초기값을 생략하지 않는 것이 권장된다.
예제 코드 작성해보기
1. reduce() 메소드로 배열 내 모든 값의 합 구해보기
let age = [10, 15, 20];
let sumAge = age.reduce(function(accumulator, currentValue) {
return accumulator + currentValue;
},0);
console.log(sumAge); //45
// 1번째 accumulator = 0, currentValue = 10, i = 0, return 10
// 2번째 accumulator = 10, currentValue = 15, i = 1, return 25
// 3번째 accumulator = 25, currentValue = 20, i = 2, return 45
//화살표 함수를 사용한 코드
let age = [10, 15, 20];
let sumAge = age.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
},0);
console.log(sumAge); //45
2. reduce() 메소드로 배열 내 원하는 항목의 값만 더하기
let shoppingList = [
{
name : '양배추',
price : 2000,
카테고리 : '채소',
},
{
name : '당근',
price : 500,
카테고리 : '채소',
},
{
name : '꼬북칩',
price : 1800,
카테고리 : '간식',
},
{
name : '구구콘',
price : 1500,
카테고리 : '간식',
}
];
const sumPrice = shoppingList.reduce((acc, cur) => {
return acc + cur.price;
}, 0);
console.log('장보기 예상 가격', sumPrice);

'Java Script > 공부 기록' 카테고리의 다른 글
| [JavaScript] 문자열 공백 제거 (0) | 2023.08.23 |
|---|---|
| [JavaScript] Map 메소드 (1) | 2023.08.22 |
| [JavaScript] Part3 Studying - 2 (0) | 2023.08.22 |
| [JavaScript] 문자열 추출하기 (0) | 2023.08.20 |
| [JavaScript] Part3 Studying (0) | 2023.08.18 |