reduce()메서드는 배열의 각 요소에 대해 주어진 리듀서함수를 실행하고, 하나의 결과값을 반환한다.
리듀서 함수는 4개의 인자를 가진다.
- 누산기(acc)
- 현재 값(cur)
- 현재 인덱스(idx)
- 원본 배열(src)
구문
arr.reduce(callback[, initialValue])
구문으로 사용할 수 있다.
매개변수
callback
: 배열의 각 요소에 대해 실행할 함수이며, 다음 4가지 인수를 받을 수 있다.
- accumulator : 콜백의 반환값을 누적하고, initialValue값이 있을 경우 initialValue값이다.
- currentValue : 처리할 현재 요소
- currentIndex : 처리할 현재 요소의 인덱스이며 initialValue값을 제공할 경우 0이나 1부터 시작한다.
- array : reduce()를 호출한 배열
initialValue
: callback의 최초 호출에서 첫번째 인수에 제공하는 값이며, 초기값이 없으면 배열의 첫번째 요소를 사용한다.
빈 배열에서는 initialValue가 없으면 오류가 발생된다.
에제
- 배열의 모든 값 합산 (화살표 함수 사용)
1 2
var total = [ 0, 1, 2, 3 ].reduce( ( accumulator, currentValue ) => accumulator + currentValue,0);
- 객체 배열의 값 합산 객체로 이루어진 배열의 값을 합산하기 위해서는 반드시 초기값을 주어야 한다.
1 2 3 4 5 6 7 8
var initialValue = 0; var sum = [{x: 1}, {x:2}, {x:3}].reduce( (accumulator, currentValue) => accumulator + currentValue.x ,initialValue ); console.log(sum) // logs 6
- 중첩 배열 펼치기
1 2 3 4 5
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( ( accumulator, currentValue ) => accumulator.concat(currentValue), [] );