JavaScript | iterador

Es un objeto o patrón que nos permite recorrer una lista o colección. Los iteradores definen las secuencias e implementan el protocolo de iterador que devuelve un objeto utilizando un método next() que contiene el valor y listo. El valor contiene el siguiente valor de la secuencia del iterador y done es el valor booleano verdadero o falso si el último valor de la secuencia se ha consumido, entonces es verdadero, de lo contrario, es falso. Podemos comprobar si alguna entidad es por defecto iterable o no.

Podemos comprobar su prototipo y ver si tiene un método Symbol(Symbol.iterator) o no. En Array.prototype encontrará Symbol(Symbol.iterator): ƒ values() method . Array es por defecto iterable. Además, String, Map & Set son iterables incorporados porque todos sus objetos prototipo tienen un método Symbol.iterator() .

  • Programa:

    <script>
      
    const array = ['a', 'b', 'c'];
      
    const it = array[Symbol.iterator]();
      
    // and on this iterator method we have ‘next’ method
      
    document.write(JSON.stringify(it.next()));
    //{ value: "a", done: false }
      
    document.write(JSON.stringify(it.next()));
    //{ value: "b", done: false }
      
    document.write(JSON.stringify(it.next()));
    //{ value: "c", done: false }
      
    document.write(JSON.stringify(it.next()));
    /* Actual it.next() will be { value: undefined, 
    done: true } but here you will get
    {done: true} output because of JSON.stringify 
    as it omits undefined values*/
      
      
    </script>                    
  • Producción:
    {"value":"a","done":false}{"value":"b","done":false}
    {"value":"c","done":false}{"done":true}

Usando for.of loop , podemos iterar sobre cualquier entidad (por ejemplo: objeto) que sigue el protocolo iterable. El bucle for.of extraerá el valor que obtiene un retorno llamando al método next() cada vez.

  • Programa:

    <script>
      
    const array = ['a', 'b', 'c'];
      
    const it = array[Symbol.iterator]();
      
    for (let value of it) {document.write(value)}
      
    </script>                    
  • Producción:
    abc

Protocolo iterable: el objeto debe definir un método con ‘Symbol.iterator’, la clave que devuelve un objeto que sigue el protocolo iterador. El objeto debe definir el método ‘siguiente’ que devuelve un objeto que tiene dos propiedades ‘valor’ y ‘hecho’

  • Sintaxis:
    {value: 'item value', done: boolean}
  • Escenario de error:
    var newIt = arr[Symbol.iterator]
    
    newIt()
    
    //Because it does not properly bind
    Uncaught TypeError: Cannot convert undefined or null to object 
    //How we can fix this 
    //var newIt = arr[Symbol.iterator].bind(arr); 
    
    newIt()
    Array Iterator { }
    

Crea nuestro propio objeto iterable:

  • <script>
    var iterable = {
      i: 0,
      [Symbol.iterator]() {
        var that = this;
        return {
          next() {
            if (that.i < 5) {
              return { value: that.i++, done: false }
            } else {
              return { value: undefined, done: true }
            }
          }
        }
      }
    }
      
    for(let value of iterable){document.write(value)}
    </script>
  • Producción:
    0 1 2 3 4

Publicación traducida automáticamente

Artículo escrito por khandelwalsarthak31193 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *