자바 스크립트 빈 배열 줄이기


104

배열을 줄이면 숫자 0을 얻으려고하지만 함수의 동작을 명확하게 이해하지 못합니다.

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

결과

TypeError: Reduce of empty array with no initial value

배열이 비어 있으면 줄일 수 없습니다

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

결과

""

배열의 유일한 요소가 빈 문자열 인 경우 빈 문자열을 검색합니다.

답변:


228

두 번째 매개 변수 는 초기 값입니다.

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
}, 0);

또는 ES6 사용 :

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);

24

두 동작 모두 사양에 따릅니다 .

reduce두 번째 인수로 초기 "누적"값을 명시 적으로 제공하지 않는 한 빈 배열을 사용할 수 없습니다 .

initialValue가 제공되지 않은 경우 previousValue는 배열의 첫 번째 값과 같고 currentValue는 두 번째 값과 같습니다. 배열에 요소가없고 initialValue가 제공되지 않은 경우 TypeError입니다.

배열에 요소가 하나 이상있는 경우 초기 값 제공은 선택 사항입니다. 그러나 하나가 제공되지 않으면 배열의 첫 번째 요소가 초기 값으로 사용되며 reduce콜백을 호출하여 나머지 배열 요소를 계속 처리합니다. 귀하의 경우 배열에는 단일 요소 만 포함되므로 콜백을 통해 처리 할 요소가 더 이상 없으므로 해당 요소가 초기 값과 최종 값이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.