인프런 커뮤니티 질문&답변

ajrfyd님의 프로필 이미지
ajrfyd

작성한 질문수

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

reduce에서 nop 지원

reduce 함수 질문입니다!

작성

·

525

0

강의 잘 듣고 있습니다. 항상 파이팅 입니다!

이 강의에서 만든 Reduce 함수 궁금한 점이 있습니다.

이터러블 프로토콜을 활용해 배열의 첫번째 값을

초기값으로 설정 할 수 있는 것 까지는 알겠습니다.

기존 Array.prototype.reduce 에서는 초기값을 설정 할 수

있는데...arr.reduce((acc, cur) => blabla, {}) 요런 식으로

빈 객체나 배열을 통해 새로운 객체나 배열을 만들 수 있는데

이터러블 프로토콜을 활용해 만든 함수 reduce는 방법이 없나요

제가 사용을 못하는 것일까요?? 방법이 있다면 어떤 방식으로

사용해야 할까요???

답변 2

0

ajrfyd님의 프로필 이미지
ajrfyd
질문자

스크린샷 2023-01-15 오후 2.50.11.png저도 저렇게 시도해 봤는데요ㅠㅠ f는 함수가 아니라네요...ㅠ

 

스크린샷 2023-01-15 오후 2.57.22.png말씀해 주신대로 리듀스만 단독 사용시 저렇게 해도 정상적

으로 사용 가능한데 위처럼 파이프라인 안에서는 저 방식이

동작하지 않네요 ㅠㅠ b를 보시면 커링이 적용 된것 같은데

왜 파이프라인 안에서 동작하지 않는 것일까요?? 제가 잘못

사용하는 것인가요????ㅠㅠ선생님 덕분에 함수형 프로그래밍에 흥미를 느끼고 천천히 db에서 받은 데이터를 파이프 라인에 태워 가공해 최종적으로 reduce를 활용해 입맛에 맞는 데이터를 만들기 위해 사용해 보았는데 위의 문제가 있어 어떤 부분에서 제가 잘못 이해한건지 사용법이 틀린건지 궁금해서요ㅠㅠ 저렇게 되지 않는다면 파이프라인을 통해 만들어진 데이터를 다시 Array.prototype.reduce로 가공을 해야 하는것인지....자꾸 귀찮게 해드려 죄송합니다..

유인동님의 프로필 이미지
유인동
지식공유자

go(
[1, 2, 3]
(iter) => reduce(f, {}, iter)
);

이렇게 작업 부탁드려요. :)

0

유인동님의 프로필 이미지
유인동
지식공유자

질문을 이해하지 못하고 있어요~ :)

ajrfyd님의 프로필 이미지
ajrfyd
질문자

빠른 답변 감사 드립니다 !

 

예를 들어 Array의 메소드인 reduce 같은 경우에

 

초기값을 {}로 설정하면 배열로 객체를 만들 수 있는

 

데 [{ 객체 }, { 객체 }].reduce((acc, cur)=> { 만

약 초기값인 객체에 없다면 추가해서 만들라 로직

return acc;

}, {}) =>>>> {키: 값 , 키: 값} 요런식으로 객체도

 

만들 수 있는데 go 나 pipe 에 연결된 reduce는

 

_.go(arr,

map,

reduce((acc, cur) => {}, 초기값 {} 혹은 []) 에러!

)

 

정확하게는 아닌데 f 는 이터러블이 아니다 라는

 

에러 나오는것 같더라구요!

 

_.reduce만 독단적으로 쓰게 되면 초기값을

 

빈 배열이나 빈 객체로 설정 가능했던것 같은데

 

파이프라인이나 고 함수 안에는 설정이 안되는데

 

의도된 것인지 아니면 제가 함수형 프로그래밍의

 

의도와 맞지 않게 사용하는 것인지 이해을 못한 것

 

인지 만약 방법이 있다면 어떤 방식으로 사용해야

 

하는 것인지 궁금 합니다 !

유인동님의 프로필 이미지
유인동
지식공유자

아하 이해했어요 :)

초기값을 넣어야할때는

iter => reduce(f, {}, iter);

이렇게 하시면 되어요~

ajrfyd님의 프로필 이미지
ajrfyd

작성한 질문수

질문하기