JavaScript: Generator

By Xah Lee. Date: . Last updated: .

New in JS2015.

Generator object is a object that conforms to both the Iterator interface and Iterable interface. [see Interface]

Create Generator

To create a generator:

Write Generator by Hand

// create a iterator
const xitr = {};
xitr.i = 0;
xitr.next =
  () => ((xitr.i < 3)
    ? { value: xitr.i++, done: false }
    : { value: undefined, done: true });

// create a generator
const xgen = {};

// add a Symbol.iterator property, so it conforms iterable interface
xgen[Symbol.iterator] = () => xitr;

// add a next property, so it conforms iterator interface
xgen.next = xitr.next;

// test it as a iterable
console.log(
  [...xgen],
);
// [ 0, 1, 2 ]

// test it as a iterator
// call generator object by using the β€œnext()” method
console.log(xgen.next());
console.log(xgen.next());
console.log(xgen.next());

/*

prints

[ 0, 1, 2 ]
{ value: undefined, done: true }
{ value: undefined, done: true }
{ value: undefined, done: true }

because already reached end when we tested it using spread operator

 */

Create Generator by Generator Function

// define a generator function
function* ff() {
  yield 3;
  yield 4;
  yield 5;
}

// generator function returns a generator object
const xgen = ff();
// now xgen is a generator object

// test it as iterable by using spread operator
console.log(xgen.next());
console.log(xgen.next());
console.log(xgen.next());

/*
{ value: 3, done: false }
{ value: 4, done: false }
{ value: 5, done: false }
 */

// test generator as iterable by using spread operator
console.log([...xgen]);
// []
// empty because already reached the end when we test it using next

[see Generator Function]

JavaScript Iterable 🌟

BUY Ξ£JS JavaScript in Depth