TypeError: Reduce of empty array with no initial value
2021. 3. 30. 20:59ㆍ공부내용 공유하기
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));