inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

함수형 프로그래밍과 JavaScript ES6+

reduce 2

초기값이 없는 경우

253

Boom

작성한 질문수 20

0

현 products의 배열의 값은 각 이터레이터 평가 값으로 

{ value : {name:"", price:0}, done:false} 를 반환하게 된다고 했을 때 지금 작성 해주신 부분에서 초기 값이 없을 경우,

초기 acc값으로 iter.next().value는 객체가 되는 것으로 보여 지고 있습니다.

그렇다면, 정상적으로 price가 합산된 값으로 평가 되지 않을 것으로 보여지는데요

#1 : 이럴경우는 이게 정상적으로 동작한 reduce라고 봐야 하는 것일까요? 

그래서 시도한 부분은 초기값 제외 products값을 map을 통해서 price만을 가지는 number[] 로 변환을 하고

역할을 위임한 함수에서는 object.price가 아닌.

순수하게 현재의 값을 반환 하는 형식으로 변경 처리 하였는데 이렇게 하면 의미가 퇴색 되는 것 같다는 느낌을 받았습니다.

## acc의 초기 값이 price:number가 아닌

{name:string, price:number}가 될 것이라는 부분에서 의문이 들어서 질문 드립니다.

javascript 함수형-프로그래밍

답변 1

1

MDU 유인동

안녕하세요 :) 

질문 감사합니다. 

오해가 있어보입니다 ^^

reduce 사용할때 배열의 원소의 형과 누적하여 리턴할 값의 형이 다른 패턴일때는 초기값이 없을  없습니다 패턴일 때는 초기값이 없겠금 무언가를 하는  자체를 고려하는 것이 의미가 없는 일 입니다애초에 초기값을 넣는 것이 올바른 사용법이기 때문입니다

말씀하신 

reduce(add, map(p => p.price, products));

 매우 좋은 패턴입니다.  더 작은 단위로 문제 해결을 하기 때문입니다 :) 응용편에서 이러한 부분에대해  설명하기도 합니다.

다만  상황에서 products 빈배열일  0 만들고 싶은 경우 아래와 같이 해야하겠지요

reduce(add, map(p => p.price, products)) || 0; 

reduce 함수 구현부에 초기값이 없는 경우와 있는 경우를 지원하고 있는건 초기값이 필요한 패턴에서 초기값이 없을 경우를 지원하기 위함이 아닌,

reduce(add, [1, 2, 3]);

 같이 사용하거나

reduce((obj, [k, v]) => Object.assign(obj, {[k]: v}), {}, [["a", 1], ["b", 2]]);

 같이 사용하기 위해  두가지 용도만으로 사용하기 위해 지원하는 것입니다

reduce((obj, [k, v]) => Object.assign(obj, {[k]: v}), [["a", 1], ["b", 2]]);

이러한 코드는 지원하기 위한 목적이 아닙니다.

감사합니다

프론트엔드 실무에서 어떤때에 쓰이는지 궁금합니다

1

111

1

함수형 프로그래밍 심화 강의 자료 추천

0

72

2

함수형 자바스크립트 프로그래밍 책

0

52

1

filter가 아무것도 걸러내지 못하는 경우

0

113

1

take 함수의 성능적면에서의 이점

1

463

1

pipe함수

1

530

1

Identity 함수

0

450

1

함수형 프로그래밍이란

0

831

1

reduce 예제 코드 제안!

0

404

1

fxts를 배워보려고 합니다.

1

537

1

flatMap 관련 질문드립니다~

1

444

1

다용성이 높은 L.flatMap

0

357

1

변수에 재 할당 금지~

0

540

1

DevTools라고 옆에 결과 확인하는거 어떻게 하나요?

0

483

2

소요시간에 관해서 질문드립니다

1

457

1

join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!

0

465

2

reduce에 L.range를 사용할 때

0

526

2

[이해내용 공유] Lazy 에서 C.reduce가 병렬 효과를 내는 이유

3

738

2

제가 이해한 C.Reduce와 Reduce의 동작 차이 정리

2

787

3

go, pipe 함수 관련하여 질문 드립니다.

1

498

1

안녕하세요 강사님!

0

379

2

fxts에 go가 없는 이유?

0

839

1

비동기 관련 질문입니다!

0

460

1

질문 있습니다.

0

515

1