Iterables & Iterators

Iterables and Iterators

Are conventions implemented by Arrays, Maps, Sets and strings, that make them iterable by a iteration protocol.

These Iterable objects are used by:

  • Used by for _ of _.

  • Used by the spread operator.

How an iterator works

const langs = ['A', 'B', 'C'];

const iterator = langs[Symbol.iterator]();

// Will invoke the next element
iterator.next();  -> { value: 'A', done: false }
iterator.next();  -> { value: 'B', done: false }
iterator.next();  -> { value: 'C', done: false }
iterator.next();  -> { value: undefined, done: true }

Creating an Iterator

function createIterator(...args) {
    let i = 0;
    return {
        next() {
            if (i < args.length) {
                return { value: args[i++], done: false }
            }
            else {
                return { value: undefined, done: true }
            }
        }
    }
}

const iterator = createIterator('A', 'B', 'C');

iterator.next();
iterator.next();
iterator.next();
iterator.next();

// This will not work because iterator is not ITERABLE
for (let val of iterator) {
    ...
}

To resolve this...

Last updated