핵심 원인 한 줄
빈 배열([])에 초기값(initialValue)을 지정하지 않은 채 Array.prototype.reduce()를 호출하여 발생한 타입 오류입니다.
우선 해결 순서
- 초기값 추가하기:
reduce()메서드의 두 번째 인자로 빈 배열일 때 반환할 기본값(숫자 계산인 경우0, 문자열인 경우""등)을 전달합니다. - 조건문으로 분기 처리하기: 배열이 비어있지 않을 때만
reduce()를 호출하도록 사전에 길이를 체크합니다.
수정 예시
방법 1: 초기값(Initial Value) 지정하기 (가장 권장되는 방식)
const items = [];
// 두 번째 인자로 0을 전달하여 빈 배열일 때 0을 반환하도록 처리
const totalSum = items.reduce((accumulator, current) => accumulator + current, 0);
console.log(totalSum); // 출력: 0
방법 2: 배열 길이를 확인한 후 처리하기
const items = [];
// 배열이 비어있지 않은 경우에만 reduce 실행, 아니면 기본값 0 대입
const totalSum = items.length > 0
? items.reduce((accumulator, current) => accumulator + current)
: 0;
console.log(totalSum); // 출력: 0
정상 확인 방법
- 코드를 수정한 후
[](빈 배열)을 넣었을 때TypeError가 발생하지 않고 설정한 초기값(예:0)이 정상적으로 반환되는지 확인합니다. - 데이터가 있는 배열(
[1, 2, 3])을 넣었을 때 정상적으로 누적 연산 결과(6)가 나오는지 교차 검증합니다.
해결되지 않을 때 다른 원인과 확인 방법
- 원인: 전달된 데이터가 배열이 아니라
undefined나null인 경우에도 유사한 에러가 발생할 수 있습니다. - 확인 방법:
reduce를 호출하기 직전에console.log(Array.isArray(variable), variable)를 출력하여 실제로 배열 형태인지, 데이터가 누락되지는 않았는지 확인합니다.
의견 보내기