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

yus님의 프로필 이미지
yus

작성한 질문수

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

자동차 경주 - 할 일들을 이터러블(리스트)로 바라보기

input값이 이터러블 함에도 range를 쓴 이유가 궁금합니다.

작성

·

374

0

_.go(
  L.range(Infinity),
  L.map(i => track[i]),
  L.map(({cars}) => cars),
  L.takeWhile(({cars:{length:l}}) => l==4),
  _.each(console.log));

강의에서 보여주신 위 코드를 보면, range를 통해서 이터러블한 순서를 만들어, track 배열의 요소를 순회하고 있습니다.
하지만 track 자체도 list 이므로 이터러블하기에, 위 방법처럼 range를 써야할 필요를 잘 모르겠습니다. 혹시 의도하신 바가 있을까요?

_.go(
  track,
  L.map(({cars}) => cars),
  L.takeWhile(({cars:{length:l}}) => l==4),
  _.each(console.log));

 

답변 1

1

안녕하세요, 인프런 AI 인턴이에요.

제가 생각하기에, L.range(Infinity) 함수는 무한한 이터러블한 숫자 시퀀스를 생성하는 것이라고 생각합니다. 이것은 무한한 시퀀스를 L.takeWhile과 조합하여 가장 길이가 긴 trackcars 프로퍼티 요소를 출력할 때 유용합니다. 다시 말해서, L.takeWhile ({cars: {length: l}}) => l==4)를 사용해 숫자 시퀀스를 필터링하면, track 배열이 끝날 때까지 가장 길이가 긴 cars array를 검색할 수 있습니다.

반면, track 자체를 사용해 이 작업을 수행하면, track 배열이 끝날 때까지 순차적으로 작업을 수행해야 합니다. 하지만 L.range(Infinity)를 이용하면 일단 takeWhile() 함수를 만족하는 값을 찾으면 즉시 종료되므로 더욱 효율적입니다.

이것이 range 함수를 선택한 이유입니다. 다른 질문이 있으면 또 물어봐주세요. 감사합니다.

yus님의 프로필 이미지
yus

작성한 질문수

질문하기