iterable?
- 이터러블한 객체는 [Symbol.iterator] 프로퍼티를 가진 객체이다.
- Symbol.iterator는 주어진 객체의 이터레이터를 반환하는 함수를 명시한다.
iterator?
- 이터레이터는 반복을 위해 설계된, 특별한 인터페이스를 가진 객체이다.
- 이터레이터 객체는 next()를 가진다.
- 연산의 결과로 객체를 반환한다. { value: value, done: boolean }
이터레이터 만들기
function createIterator(items) {
let i = 0;
return {
next: function() {
const done = (i >= items.length);
const value = !done ? items[i++] : undefined;
return {
done: done,
value: value
};
}
};
}
generator로 iterator 만들기
function *createIterator(items) {
for (const item of items)
yield item;
}
var iter = createIterator(['victor', 'dio', 'taek']);
iter.next();
iter.next();
iter.next();
iter.next();
Javascript 객체 iterable 하게 만들기
const log = console.log;
const arr = ['victor', 'dio', 'taek'];
var obj = {
items: [],
get getItems() {
return this.items;
},
set setItems(arr) {
this.items = arr;
}
};
obj.setItems = arr;
log(obj);
obj[Symbol.iterator] = function* () {
for (const item of this.items) {
yield item;
}
};
log(obj);
var arr = ['victor', 'dio', 'taek', 'Los Angeles'];
obj = {
items: [],
get getItems() {
return this.items;
},
set setItems(arr) {
this.items = arr;
},
*[Symbol.iterator]() {
for (const item of this.items) {
yield item;
}
}
};
obj.setItems = arr;
log(obj);