이터레이터
next()
사용해 반복
{ value: <value>, done: <boolean> }
형식의 객체 반환
done === true
일때 종료
const iterator = {
current: 0,
last: 5,
next() {
if (this.current <= this.last) {
return { value: this.current++, done: false };
} else {
return { value: undefined, done: true };
}
}
};
console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: 4, done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
제네레이터
- 이터레이터를 쉽게 생성 하도록 가능한 함수
function*
문법을 사용
yield
를 통해 값을 반환하고 함수를 일시 중시 시킴
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
이터러블
Symbol.iterator
메소드를 사용해 이터레이터 반환
const iterable = {
[Symbol.iterator]() {
let step = 0;
return {
next() {
if (step < 3) {
return { value: step++, done: false };
} else {
return { value: undefined, done: true };
}
}
};
}
};
for (const value of iterable) {
console.log(value); // 0, 1, 2
}