JS

Js reduce

gurwhddl 2023. 2. 27. 16:21

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다 by MDN

 

    arr.reduce(callback[, initialValue])

다른 메서드들처럼 배열의 각 요소에 실행할 콜백함수와, 선택사항으로 initialValue를 지정해줄 수 있음

initialValue를 지정하지 않은 경우에는 자동적으로 arr의 첫번째 인덱스값이 지정된다는거

callback의 매개변수에 들어가는건

  • accumulator
  • currentValue
  • currentIndex
  • array

acc

- 단어 의미 그대로 누적값이라고 생각하면 됨. 각 요소마다 콜백함수가 실행되는데 그 return값이 다음 콜백함수 실행할때 acc의 값이 됨

- 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값

  • map이나 forEach와는 다르게 initialValue를 제공 안했으면 배열의 인덱스 0은 그냥 건너뜀 

initialValue(초기값이라고 하겠음) 지정 안했더니 처음 콘솔에 찍힌 acc는 자동으로 a[0]의 값을 가지게 되고, 인덱스 1부터 진행되기 때문에 a.length-1번만큼 콘솔에 찍히게 됨

이건 왤케 크게됐지

초기값을 0으로 설정하게 되면 acc는 저 초기값부터 시작하게 되고, 인덱스 0부터 진행되기 때문에 a.length만큼 콘솔에 찍히게 됨

*초기값이 꼭 숫자일 필요는 없음 . 다른것도 가능

 

정리

reduce도 다른 배열 메서드들하고 똑같이 각 배열요소마다 콜백함수가 실행되는데, 콜백함수의 return값이 acc에 계속 쌓임

초기값을 지정안하면, acc는 자동으로 배열의 첫번째 값이 저장되고, index 1부터 진행됨

초기값을 지정하면, acc는 그 초기값에서 시작하고, index 0부터 진행됨

초기값 꼭 숫자로 안해도됨

근데 왜 꼭 이름을 reduce로 한거지 acc 이런걸로하면 이해하기 쉬웠을듯