Iterable Object
let sum = 0; for (let i of [1, 2, 3]) { sum += i; } sum; // => 6
- 배열은 iterable하다. for/of를 통해서 출력이 가능하다.
- Iterator는 스프레드 오퍼레이터도 사용할 수 있다.
Iterable Object
let m = new Map([ ["one", 1], ["two", 2], ]); for (let [k, v] of m) console.log(k, v); / new Set("abc"); // => new Set(["a", "b", "c"])
- Map과 Set을 통해서도 이터레이블한 배열을 만들어낼 수 있다.

Symbol.iterator 를 가지고 있는 것을 확인해야한다. 이는 메소드이고 호출하면 Array Iterator{} 객체를 반환한다. 이 객체는 next() 라는 메소드를 지니고 있다.이 next()를 호출해보자.
let a = [1,2,3]
b = a[Symbol.iterator]() //Array Iterator{}
b.next() //{value: 1, done: false}
b.next() //{value: 2, done: false}
b.next() //{value: 3, done: false}
b.next() //{value: undefined, done: true}
let head = iter.next().value; // head == 1 iter.next(); let tail = [...iter]; // tail == [3,4,5] console.log(tail);
- next()는 한번 뽑으면 끝.... 스프레드 오퍼레이터로 전부 출력할 수 있다.
Generators
function* oneDigitPrimes() { yield 2; yield 3; yield 5; yield 7; } let primes = oneDigitPrimes(); / primes.next().value; //=>2 primes.next().value; //=>3 primes.next().value; //=>5 primes.next().value; //=>7 primes.next().done; // => true
- Iterators처럼 next()를 통해서 객체를 던져준다.
function* oneDigitPrimes() {
// Invoking this function does not run the code
yield 2; // but just returns a generator object. Calling
yield 3; // the next() method of that generator runs
yield 5; // the code until a yield statement provides
yield 7; // the return value for the next() method.
}
function* sequence(...iterables) {
for (let iterable of iterables) {
for (let item of iterable) {
yield item;
}
}
}
//or
function* sequence(...iterables) {
for (let iterable of iterables) {
yield* iterable; //yield에 별표 찍고 있음.
}
}
console.log([...sequence("abc", oneDigitPrimes())]);
// => ["a","b","c",2,3,5,7]