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 }
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 }
Ejemplo 2
const numbers = [2,4,6,8]; for (const x of numbers) { // bloque de código a ejecutar }
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 }
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 }
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
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 }
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 }