공군소령김도지
624
2021-07-21 02:57:56
1
148

(JS) Reduce 함수 질문 드려요 (진짜 모르겠어요)



let arr = [1,2,3]

 let value = arr.reduce((acc,cur)=>{
    return acc+cur;
  })


보시는 바와 같이 초기값을 설정 안했음으로 

value 값은

1+2

3+3

해서 6이 뜹니다. 


   let value = arr.reduce((acc,cur)=>{
    return acc+cur/arr.length;
  })


근데 값자기 여기선 

6/3(arr.length) 해서 2가 뜨는게 아니라 

2.666666666이 value 값으로 뜹니다...

이게 어떻게 된 일인가요?

0
  • 답변 1

  • 메이플비
    452
    2021-07-21 04:46:38 작성 2021-07-21 08:44:34 수정됨

    리듀스 두번째 아규먼트로 초기값을 넣지 않으면 첫번째 원소가 acc가 됩니다.

    그래서 첫번째 콜

    1 + 2 / 3 = 1.666666...

    두번째 콜

    1.66666... + 3 / 3 = 2.6666666.....

    이 나옵니다.


    만약 두번째 아규먼트에 초기값으로 0을 넣어준다면 arr.reduce(callback, 0) 이런식으로...

    첫번째 콜

    0 + 1 / 3 = 0.333333...

    두번째 콜

    0.3333... + 2 / 3 = 1

    세번째 콜

    1 + 3 / 3 = 2

    로 나옵니다.


    그리고 마지막에 6/3(arr.length)로 이해하신 부분은 완전히 잘못 이해하시고 계십니다.

     / arr.length가 마지막에만 적용되는게 아니라 매 콜마다 적용되는겁니다.


  • 로그인을 하시면 답변을 등록할 수 있습니다.