JavaScript: Iterator(반복기)

이토니·2024년 1월 16일
0

JavaScript

목록 보기
25/33
post-thumbnail

Iterable

  • 반복이 가능하다는 것을 Iterable이라고 한다.
  • 배열은 Iterable하다.
  • for ... of를 이용할 수 있거나,
  • [Symbol.iterator]()이 값을 가지면 Iterable한 것이다.

Iterator

  • 반복자는 next()를 호출한다.
    -{value: , done: } 두 개의 속성을 가지는 객체를 반환한다.
  • value: 현재 인덱스에 해당하는 배열 요소이다.
  • done: 순회가 완료되었는지 나타내는 bool 값이다. 만약 배열의 끝에 도달하면 true가 된다.

숫자 배열을 순회하는 이터레이터

첫 번째 방법

function makeIterator(numbers) { // makeIterator함수는 numbers 배열을 인자로 받는다. 
    let nextIndex = 0; // 배열의 현재 인덱스를 초기화한다. 

    return {
        next: function () { // 함수는 이터레이터 객체를 반환한다.
          // next는 호출 시마다 다음 요소를 반환한다. 
            return nextIndex < numbers.length ? // 현재 인덱스가 배열의 길이보다 작은지 확인한다.
                { value: numbers[nextIndex++], done: false } :
            // 만약 작다면 현재 요소를 반환하고, 인덱스를 1 증가시킨다. 
                { value: undefined, done: true }
          // 아니라면 순회가 끝났음을 나타내준다. 
        }
    }
}

❓ 삼항 연산자 알아보기
if-else 문을 간단한 한 줄로 요약해준다.
return nextIndex < numbers.length ? {}: {}

조건 ? 참일 때의 값 : 거짓일 때의 값

두 번째 방법

// 숫자 배열 생성
const numbersArr = [1, 2, 3];
// 이터레이터에 숫자 배열 넣어주기
const numbersIterator = makeIterator(numbersArr); 


// 배열의 다음 요소 요청
console.log(numbersIterator.next()); // value: 1, done: false
console.log(numbersIterator.next()); // value: 2, done: false
console.log(numbersIterator.next()); // value: 3, done: false
console.log(numbersIterator.next()); // value: undefined, done: ture

const numbersIterator = makeIterator(numbersArr);: makeIterator 함수를 호출하면서 numbersArr 배열을 인자로 넘겨준다. 반환된 이터레이터는 numbersIterator 변수에 저장된다.

profile
cool & soft codes

0개의 댓글