Clean β’ Professional
An iterator is an object that provides a sequence of values, one at a time, through a next() method.
next() method returns an object:{ value: any, done: boolean }
value: The current value in the sequence.done: true if the iteration is complete, otherwise false.next() method that returns {value, done} is an iterator.Basic Example
const array = [1, 2, 3];
const iterator = array[Symbol.iterator](); // Built-in iterator
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: undefined, done: true }
You can manually define an iterator by creating an object with a next() method:
const myIterable = {
items: [10, 20, 30],
[Symbol.iterator]() {
let index = 0;
return {
next: () => index < this.items.length
? { value: this.items[index++], done: false }
: { done: true }
};
}
};
const iterator = myIterable[Symbol.iterator]();
console.log(iterator.next()); // { value: 10, done: false }
console.log(iterator.next()); // { value: 20, done: false }
console.log(iterator.next()); // { value: 30, done: false }
console.log(iterator.next()); // { done: true }
.values(): Iterator for values.keys(): Same as .values() (for Map compatibility).entries(): Iterator for [value, value] pairsconst set = new Set([1, 2, 3]);
const values = set.values();
console.log(values.next()); // { value: 1, done: false }
.entries(): [key, value] iterator.keys(): Iterator for keys.values(): Iterator for valuesconst map = new Map([["apples", 500], ["bananas", 300]]);
const entries = map.entries();
console.log(entries.next()); // { value: ["apples", 500], done: false }
Iterators yield references to objects in collections. Modifying them affects the original:
const map = new Map([[{ id: 1 }, 500]]);
const key = map.keys().next().value;
key.id = 2;
console.log([...map][0][0].id); // 2
for...of: Use iterators under the hood for looping.