입출력 예
numbers | result |
---|---|
1,2,3,4,5,6,7,8,9,10 | 5.5 |
89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 | 94.0 |
입출력 예 #1
입출력 예 #2
const solution = (numbers) => numbers.reduce((a,b) => a+b,0)/numbers.length
reduce()
메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
const array1 = [1, 2, 3, 4];
// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
(accumulator, currentValue) => accumulator + currentValue,
initialValue
);
console.log(sumWithInitial);
// Expected output: 10
리듀서 함수는 네 개의 인자를 가집니다.
arr.reduce(callback[, initialValue])
callback
배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 받습니다.
accumulator
누산기는 콜백의 반환값을 누적합니다. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue
를 제공한 경우에는 initialValue
의 값입니다.
currentValue
처리할 현재 요소.
currentIndex
처리할 현재 요소의 인덱스. initialValue를 제공한 경우 0, 아니면 1부터 시작합니다.
array
reduce()
를 호출한 배열.
initialValue
callback
의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용합니다. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생합니다.
reduce()
는 빈 요소를 제외하고 배열 내에 존재하는 각 요소에 대해 callback 함수를 한 번씩 실행하는데, 콜백 함수는 다음의 네 인수를 받습니다:
콜백의 최초 호출 때 accumulator
와 currentValue
는 다음 두 가지 값 중 하나를 가질 수 있습니다. 만약 reduce()
함수 호출에서 initialValue
를 제공한 경우, accumulator
는 initialValue
와 같고 currentValue
는 배열의 첫 번째 값과 같습니다. initialValue
를 제공하지 않았다면, accumulator
는 배열의 첫 번째 값과 같고 currentValue
는 두 번째와 같습니다.
참고: initialValue를 제공하지 않으면, reduce()는 인덱스 1부터 시작해 콜백 함수를 실행하고 첫 번째 인덱스는 건너 뜁니다. initialValue를 제공하면 인덱스 0에서 시작합니다.
배열이 비어있는데 initialValue
도 제공하지 않으면 TypeError
가 발생합니다. 배열의 요소가 (위치와 관계없이) 하나 뿐이면서 initialValue
를 제공되지 않은 경우, 또는 initialValue
는 주어졌으나 배열이 빈 경우엔 그 단독 값을 callback
호출 없이 반환합니다.
다음의 예제처럼 initialValue
을 제공하지 않으면 출력 가능한 형식이 세 가지이므로, 보통 초기값을 주는 것이 더 안전합니다.
var maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x );
var maxCallback2 = ( max, cur ) => Math.max( max, cur );
// initialValue 없이 reduce()
[ { x: 22 }, { x: 42 } ].reduce( maxCallback ); // 42
[ { x: 22 } ].reduce( maxCallback ); // { x: 22 }
[ ].reduce( maxCallback ); // TypeError
// map/reduce로 개선 - 비었거나 더 큰 배열에서도 동작함
[ { x: 22 }, { x: 42 } ].map( el => el.x )
.reduce( maxCallback2, -Infinity );
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce