Objetos iterables de JavaScript

Los objetos iterables son objetos que pueden iterarse (como los arrays).

Los objetos iterables pueden accederse mediante código simple y eficiente.

Los objetos iterables pueden usar for..of El ciclo realiza iteraciones.

Ciclo for..of

for..of La instrucción se utiliza para recorrer los elementos de un objeto iterable.

Sintaxis

for (variable de iterable) {
  // bloque de código a ejecutar
}

Iteración

La iteración es fácil de entender.

Sólo significa recorrer una serie de elementos.

A continuación, se presentan algunos ejemplos simples:

  • Recorrer la cadena
  • Recorrer el array

Recorrer la cadena

se puede for..of Recorrer los elementos de la cadena:

Ejemplo

const name = "W3Schools";
for (const x of name) {
  // bloque de código a ejecutar
}

Prueba personalmente

Recorrer el array

se puede for..of Recorrer los elementos del array:

Ejemplo 1

const letters = ["a","b","c"];
for (const x of letters) {
  // bloque de código a ejecutar
}

Prueba personalmente

Ejemplo 2

const numbers = [2,4,6,8];
for (const x of numbers) {
  // bloque de código a ejecutar
}

Prueba personalmente

Recorrer el conjunto

se puede for..of Recorrer los elementos del conjunto:

Ejemplo

const letters = new Set(["a","b","c"]);
for (const x of letters) {
  // bloque de código a ejecutar
}

Prueba personalmente

Comentario:Vamos a详细介绍 Set y Map en capítulos posteriores.

recorrer Map

se puede for..of recorrer los elementos de Map

Ejemplo

const fruits = new Map([
  ["apples", 500],
  ["bananas", 300],
  
]
for (const x of fruits) {
  // bloque de código a ejecutar
}

Prueba personalmente

Iterador JavaScript

El protocolo de iterador define cómo generaruna serie de valores

cuando un objeto implementa next() método, se convierte enIterador

next() El método debe devolver un objeto que contenga dos propiedades:

  • value (valor siguiente)
  • done (true o false)
value

valor devuelto por el iterador.

si done es true, se puede omitir.

done

si el iterador ha finalizado, es true.

si el iterador genera un nuevo valor, es false.

Nota:

Técnicamente, los objetos iterables deben implementar el método Symbol.iterator.

Cadenas, arreglos, TypedArray, Map y Set son objetos iterables porque sus objetos prototipo tienen el método Symbol.iterator.

Objeto iterable personalizado

El siguiente ejemplo muestra un objeto iterable personalizado que nunca termina, cada vez que se llama next() todos devolverán 10, 20, 30, 40, ...:

Ejemplo

// Objeto iterable personalizado
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      return { value: n, done: false };
    }
  };
}
// Crear objeto iterable
const n = myNumbers();
n.next(); // devuelve 10
n.next(); // devuelve 20
n.next(); // devuelve 30

Prueba personalmente

El problema es:

Los objetos iterables personalizados no soportan el de JavaScript for..of

soportan la语句 for..of

Los objetos iterables de JavaScript son aquellos que tienen Symbol.iterator objeto.

Symbol.iterator es un valor que devuelve next() función del método.

se puede utilizar el siguiente código para iterar sobre un objeto iterable:

for (const x de iterable}) { }

Ejemplo

// Crea un objeto
myNumbers = {};
// Hágalo iterable
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if (n == 100) { done = true; }
      return { value: n, done: done };
    }
  };
};
// Ahora se puede usar for..of
for (const num of myNumbers) {
  // Código arbitrario
}

Prueba personalmente

El método Symbol.iterator será for..of Llamada automática.

Pero también podemos llamarlo manualmente:

Ejemplo

let iterator = myNumbers[Symbol.iterator]();
while (true) {
  const result = iterator.next();
  if (result.done) break;
  // Código arbitrario
}

Prueba personalmente