참조
Zerocho님의 reduce, map 활용하기 글
MDN Docs
RATSENO님의 map(), reduce() 함수 글
Array.prototype.reduce(), Array.prototype.reduceRight()
배열.reduce((누적값, 현잿값, 인덱스, 요소) => { return 결과 }, 초깃값)
배열.reduceRight((누적값, 현잣값, 인덱스, 요소) => { return 결과 }, 초깃값}
- 매개변수
- 누적값 : 콜백의 반환값을 누적한다. 콜백의 이전 반환값 혹은 첫호출이면서 초깃값을 제공한 경우에 초깃값이 노적값이 된다.
- 현잿값 : 처리해야할 현재 요소
- 인덱스 (optional) : 처리할 현잿값 요소의 인덱스. 초깃값을 제공할 경우 0부터이고 아니라면 0부터 시작한다.
- 초깃값 (optional) : 최초 호출 시 첫 인수에 제공하는 값. 초깃값을 주지 않으면 배열 인자의 첫번째 값을 사용한다. 빈 배열에서 초깃값 없이 reduce()를 호출하면 에러가 발생한다.
- 배열 (optional) : reduce() 를 호출한 배열
- reduce 메서드는 Array를 하나의 단일 값으로 줄이는 용도로 쓰인다.
- reduceRight() 메서드는 reduce와 배열의 값들을 내침차순으로 접근한다는 부분만 다를뿐 원리는 똑같다.
덧셈 예시
let arr = [1, 2, 3];
arr.reduce((acc, cur, i) => {return acc + cur;}, 0)
arr.reduce((acc, cur, i) => {return acc + cur;})
acc | acc + cur | i |
---|
0 | 0 + 1 | 0 |
1 | 1 + 2 | 1 |
3 | 3 + 3 | 2 |
acc | acc + cur | i |
---|
1 | 1 + 2 | 1 |
3 | 3 + 3 | 2 |
객체 배열에서 값 합산
let list = [{ x : 1 }, { x : 2 }, { x : 3 }];
let sum = list.reduce((acc, cur) => { return acc + cur.x; }, 0)
console.log(sum)
acc | acc + cur | i |
---|
0 | 0 + 1 | 0 |
1 | 1 + 2 | 1 |
3 | 3 + 3 | 2 |