본문 바로가기
개발일지/JavaScript ES6

[21~22] range와 take의 재해석 / takeWile, takeUntil

by 꾸주니=^= 2024. 12. 2.

range와 take의 재해석

range와 take는 보통데이터 생성 및 처리를 쉽게 해주는 함수로, 데이터 파이프라인을 구성할 때 자주 사용됩니다.

1. range()

range() 함수는 지정된 범위의 숫자들을 순서대로 생성해주는 함수입니다. 보통 이 함수는 반복 작업이나 특정 범위의 값을 생성할 때 사용됩니다.

2. take()

take() 함수는 특정 개수만큼의 데이터를 추출하는 역할을 합니다. 즉, 입력받은 이터러블이나 배열에서 앞에서부터 원하는 개수만큼의 요소를 가져오는 기능을 합니다.

 

코드 설명
  • L.range(10): 0부터 9까지의 배열을 생성합니다.
  • _.take(3): 생성된 배열에서 처음 3개의 요소만 추출합니다. 즉, [0, 1, 2]를 가져옵니다.
  • _.each(console.log): 추출된 각 요소를 콘솔에 출력합니다. 출력 결과는 0, 1, 2입니다.
  • L.range(1, 10): 1부터 9까지의 이터러블을 생성합니다.
  • L.map(_.delay(1000)): 각 요소에 대해 1초 지연을 걸어 줍니다. 각 요소가 처리될 때마다 1초씩 지연이 발생합니다.
  • L.filter(a => a % 2): 홀수만 필터링합니다. 즉, 1, 3, 5, 7, 9가 남습니다.
  • L.map(() => new Date()): 각 요소에 대해 현재 날짜와 시간을 생성합니다. 각 요소가 처리되는 시점의 Date 객체를 생성합니다.
  • L.take(3): 최대 3개의 요소만 추출합니다.
  • _.each(console.log): 추출된 날짜 객체들을 콘솔에 출력합니다.

 


takeWile, takeUntil

이 두 함수는 이터러블이나 배열에서 특정 조건을 기반으로 값을 추출하는 함수입니다. 하지만 이 둘은 조건을 다르게 적용합니다.

1. takeWhile()

takeWhile()은 조건이 참인 동안 요소들을 계속 가져오는 함수입니다. 조건이 처음으로 거짓이 되면 멈추고 이후의 요소들은 가져오지 않습니다.

_go(
  [1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0],
  L.takeWhile(a => a),
  _.each(console.log)
);
  • 입력 배열: [1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0]
  • L.takeWhile(a => a):
    • a => a는 참인지 여부를 판단하는 조건입니다.
    • 즉, 요소가 0이 아닌 동안은 참으로 간주하고 그 요소를 가져옵니다.
    • 이 배열에서는 1, 2, 3, 4, 5, 6, 7, 8까지는 이고, 0이 처음 등장하는 순간 멈춥니다.
    • 따라서 출력되는 값은 1, 2, 3, 4, 5, 6, 7, 8입니다.
  • _.each(console.log): 조건을 만족하는 요소들을 콘솔에 출력합니다.

 

2. takeUntil()

takeUntil()은 조건이 참이 될 때까지 요소들을 계속 가져오는 함수입니다. 조건이 처음으로 참이 되면 멈추고 이후의 요소들은 가져오지 않습니다.

_go(
  [1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0],
  L.takeUntil(a => a),
  _.each(console.log)
);
  • 입력 배열: [1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0]
  • L.takeUntil(a => a):
    • a => a 조건은 요소가 참인지 검사합니다.
    • 조건이 참이 되기 전까지 요소들을 가져오므로, 0이 아닌 값이 처음 등장하는 순간 멈춥니다.
    • 이 경우, 처음 요소 1이 참이므로 멈추고 이전까지의 모든 값을 가져오게 됩니다.
    • 결과적으로 가져오는 값은 아무것도 없습니다.

 

또 다른 예시:

_go(
  [0, false, undefined, null, 10, 20, 30],
  L.takeUntil(a => a),
  _.each(console.log)
);
  • 입력 배열: [0, false, undefined, null, 10, 20, 30]
  • L.takeUntil(a => a):
    • 이 경우 a => a 조건이 참이 되기 전까지 요소들을 계속 가져옵니다.
    • 0, false, undefined, null까지는 모두 거짓이므로 가져오고, 10이 참이 되는 순간 멈춥니다.
    • 결과적으로 가져오는 값은 0, false, undefined, null입니다.

 

차이점 요약

  1. takeWhile():
    • 조건이 참인 동안 값을 가져옵니다.
    • 조건이 처음 거짓이 되는 순간 멈추며, 이후의 모든 값은 무시됩니다.
  2. takeUntil():
    • 조건이 참이 될 때까지 값을 가져옵니다.
    • 조건이 처음으로 참이 되는 순간 멈추며, 이후의 모든 값은 무시됩니다.