공부내용 공유하기

TypeError: Reduce of empty array with no initial value

 

Array.prototype.reduce() - JavaScript | MDN

Array.prototype.reduce() reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다. The source for this interactive example is stored in a GitHub repository. If you'd

developer.mozilla.org

javascript Array 내장 메소드인 reduce를 사용할 때 발생하는 에러.

 

더보기

참고: initialValue를 제공하지 않으면, reduce()는 인덱스 1부터 시작해 콜백 함수를 실행하고 첫 번째 인덱스는 건너뜁니다.initialValue를 제공하면 인덱스 0에서 시작합니다.

배열이 비어있는데 initialValue도 제공하지 않으면 TypeError가 발생합니다. 배열의 요소가 (위치와 관계없이) 하나뿐이면서 initialValue를 제공되지 않은 경우, 또는 initialValue는 주어졌으나 배열이 빈 경우엔 그 단독 값을 callback 호출 없이 반환합니다.

다음의 예제처럼 initialValue을 제공하지 않으면 출력 가능한 형식이 세 가지이므로, 보통 초기값을 주는 것이 더 안전합니다.

 

reduce 함수를 적용할 배열이 비어있음 + 초기값이 없을 때 발생한다. 

 

빈 배열인지 아닌지 미리 아는 상황이라면 상관없겠지만, 이 에러가 났다는 건 이미 빈 배열로 처리가 된 상황이라는 얘기니까 안전하게 초기값을 넣어주면 된다.

 

// before
const totalAmount = optionArr.map(({ amt }) => Number(amt)).reduce((a, b) => a + b));
    
// after
const totalAmount = optionArr.map(({ amt }) => Number(amt)).reduce((a, b) => a + b, 0));