This site is mobile accessible. Press the "Tap Here" button to use a different font-size.


Smartphone icons created by Freepik - Flaticon

  • 10.8 JS Object Iterables

    • Iterable objects are objects that can be iterated over with for..of.
    • Technically, iterables must implement the Symbol.iterator method.

    Iterating Over a String

    You can use a for..of loop to iterate over the elements of a string:

    Example 1: JS Iterables - Iterate over a String
    for (const x of "W3Schools") {
      // code block to be executed
    }

    Iterating Over an Array

    You can use a for..of loop to iterate over the elements of an Array:

    Example 2: JS Iterables - Iterating Over an Array
    for (const x of [1,2,3,4,5]) {
      // code block to be executed
    }

    JavaScript Iterators

    • The iterator protocol defines how to produce a sequence of values from an object.
    • An object becomes an iterator when it implements a next() method.
    • The next() method must return an object with two properties:
      • value (the next value)
      • done (true or false)
    value The value returned by the iterator
    (Can be omitted if done is true)
    done true if the iterator has completed
    false if the iterator has produced a new value

    Home Made Iterable

    This iterable returns never ending: 10,20,30,40,.... Everytime next() is called:

    Example 3: JS Iterables - Home Made Iterable part 1
    // Home Made Iterable
    function myNumbers() {
      let n = 0;
      return {
        next: function() {
          n += 10;
          return {value:n, done:false};
        }
      };
    }
    
    // Create Iterable
    const n = myNumbers();
    n.next(); // Returns 10
    n.next(); // Returns 20
    n.next(); // Returns 30
    • The problem with a home made iterable:
    • It does not support the JavaScript for..of statement.
    • A JavaScript iterable is an object that has a Symbol.iterator.
    • The Symbol.iterator is a function that returns a next() function.
    • An iterable can be iterated over with the code: for (const x of iterable) { }

    Example

    // Create an Object
    myNumbers = {};
    
    // Make it Iterable
    myNumbers[Symbol.iterator] = function() {
      let n = 0;
      done = false;
      return {
        next() {
          n += 10;
          if (n == 100) {done = true}
          return {value:n, done:done};
        }
      };
    }

    Now you can use for..of

    for (const num of myNumbers) {
      // Any Code Here
    }

    Try it yourself

    • The Symbol.iterator method is called automatically by for..of.
    • But we can also do it "manually":
    Example 4: JS Iterables - Home Made Iterable part 2
    let iterator = myNumbers[Symbol.iterator]();
    
    while (true) {
      const result = iterator.next();
      if (result.done) break;
      // Any Code Here
    }
    Navigate this module

    Eventually the navigation links, above, will be replaced by these << (previous) and >> (next) buttons below.



    JavaScript icons used in the buttons provided by ICONS8.COM. Smartphone icons created by Freepik - Flaticon