강의

멘토링

로드맵

Inflearn brand logo image

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

정진호님의 프로필 이미지
정진호

작성한 질문수

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

Kleisli Composition - L.filter, filter, nop, take

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

작성

·

37

0

function FlatEvaluation(evaluation: Array<[string, { score: number }]>) {
  return pipe(
    evaluation,
    filter(([key]) => key !== "overallAssessment"),
    map(([key, value]) => ({ key: key, score: value.score }))
  );
}

function findPros(evaluation: { [x: string]: { score: number } }) {
  return pipe(
    Object.entries(evaluation),
    FlatEvaluation,
    filter((item) => item.score >= 80),
    reduce((item, acc) => (item.score > acc.score ? item : acc)),
    (item) => item.key
  );
}

// A의 경우
findPros({ a: { score: 90 }, b: { score: 85 }, c: { score: 75 } })

// B의 경우
findPros({ a: { score: 70 }, b: { score: 65 }, c: { score: 75 } })

 

안녕하세요 선생님 강의 잘 듣고 있습니다. 다름이 아니라 한 가지 궁금한 점이 있어서 이렇게 질문을 드립니다 (나중에 뒤에 가서 이 문제에 대한 해답이 나오거나, 이미 앞에 이런 문제에 대한 해결 방법이 나왔다면 참 부끄러워질 거 같긴 합니다)

다름이 아니라 FxTS를 사용해 기존의 프로젝트 일부를 함수형으로 리팩토링 해보고자 하는 중이었습니다. { [x: string]: { score: number } } 타입의 객체를 인자로 받아 제일 고득점을 한 인원의 이름(key)를 리턴해야 합니다.

 

A의 경우 80점 이상의 득점자가 두 명이 있고, 그 중 더 높은 득점을 한 a의 이름이 잘 리턴됩니다.

그런데 B의 경우 80점 이상의 득점자가 하나도 없다보니 filter가 적절한 값을 리턴하지 못해 reduce에서 에러가 납니다.

 

이런 경우에는 어떻게 처리하는 게 옳을지 궁금합니다.

답변 1

0

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

reduce에 기본 값을 넣어주시면 됩니다 :)

정진호님의 프로필 이미지
정진호

작성한 질문수

질문하기