for ... of
를 이용할 수 있거나,[Symbol.iterator]()
이 값을 가지면 Iterable한 것이다.next()
를 호출한다.{value: , done: }
두 개의 속성을 가지는 객체를 반환한다.첫 번째 방법
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 변수에 저장된다.