배열 reduce에 초기값 지정

dev | 2021-09-22

배열의 reduce를 접할 때 마다 뭘 '줄인다'는 것인지 잘 모르겠는데 개인적으로는 차원을 줄일 수 있어서 그런가 보다 정도로 생각하고 있다. 배열의 합을 구할때 이 reduce 함수가 아주 유용하고 MDN의 reduce 페이지를 보면 다양한 용례가 있다.

그동안 배열의 합을 잘 사용하고 있었는데 일부 경우에 동작하지 않는 것이 발견되어서 살펴보니 TypeError: Reduce of empty array with no initial value라는 타입 오류가 나고 있었다.

let arr: number[] = [];
let sum = arr.reduce((a: number, c: number) => a + c);

// [ERR]: "Executed JavaScript Failed:" 
// [ERR]: reduce of empty array with no initial value 

원인은 빈 배열의 합을 구하면서 reduce를 사용한 곳이었다. 해결책은 간단한데 MDN의 오류 참조 페이지에 잘 나와있듯이 초기값을 지정해 주면 된다. 리듀서가 더하기이면 0, 곱하기이면 1 등의 초기값을 지정한다. 앞으로 reduce를 사용할 때에는 항상 초기값을 지정하는 습관을 가져야 겠다. 타입스크립트가 모든 런타임 타입 오류를 잡아줄거라는 기대는 너무 미숙했다.

Comments

    Post a comment

    :

    : 공개 되지 않습니다. Gravatar를 표시 합니다.

    :

    : HTML 태그를 사용할 수 없습니다.