Método JavaScript Array [Symbol.iterator]()
Ejemplo
Obtener el objeto iterador del array y generar en bucle:
Pruébalo »
Definición y uso
[Symbol.iterator]()Es un método integrado de los arrays de JavaScript; devuelve el iterador predeterminado del array. Este método hace que el array sea un objeto iterable, que puede serfor...ofutilizado por estructuras como bucles, etc.
¿Qué es un iterador?
Antes de comenzar a explicar el[Symbol.iterator]()método, necesitamos entender primero qué es un iterador.
El iterador es un protocolo en JavaScript que define cómo acceder secuencialmente a los elementos de una colección. Cualquier objeto que implemente el protocolo del iterador puede ser utilizadofor...ofpor bucles, el operador de propagación (...) y otras características de JavaScript.
Un objeto iterador debe implementar unnext()método, que devuelve un objeto con dos propiedades:
value: el valor de la iteración actualdone: un valor booleano que indica si la iteración ha terminado
Sintaxis básica
const iterator = array[Symbol.iterator]();
Código de ejemplo
Veamos un ejemplo sencillo:
Ejemplo
// Obtener el iterador del array
const iterator = fruits[Symbol.iterator]();
console.log(iterator.next()); // { value: 'apple', done: false }
console.log(iterator.next()); // { value: 'banana', done: false }
console.log(iterator.next()); // { value: 'orange', done: false }
console.log(iterator.next()); // { value: undefined, done: true }
En este ejemplo, nosotros:
- Creamos un array que contiene tres frutas
- A través del
[Symbol.iterator]()método obtenemos el iterador del array - Llamamos varias veces al
next()método del iterador, obteniendo secuencialmente cada elemento del array.
Escenarios de aplicación práctica
1. Usar el bucle for...of
for...ofInternamente, el bucle llama automáticamente al[Symbol.iterator]()método del array:
Ejemplo
for (const color of colors) {
console.log(color);
}
// Salida:
// red
// green
// blue
2. Usar el operador de propagación
El operador de propagación también depende del protocolo iterador:
Ejemplo
const copiedNumbers = [...numbers];
console.log(copiedNumbers); // [1, 2, 3]
3. Asignación por desestructuración
La desestructuración de arrays también utiliza el iterador:
Ejemplo
console.log(first); // 'a'
console.log(second); // 'b'
Personalizar el comportamiento de iteración del array
Aunque rara vez se necesita, puedes sobrescribir el[Symbol.iterator]()método predeterminado del array para personalizar el comportamiento de iteración:
Ejemplo
customArray[Symbol.iterator] = function() {
let index = this.length;
return {
next: () => {
index--;
return {
value: this[index],
done: index < 0
};
}
};
};
for (const num of customArray) {
console.log(num);
}
// Salida:
// 3
// 2
// 1
En este ejemplo, modificamos el iterador para que el array itere de atrás hacia adelante.
Comparación con otros métodos de iteración
Diferencias con forEach()
forEach()Es un método de array, que ejecuta una función de devolución de llamada para cada elemento.[Symbol.iterator]()Devuelve un objeto iterador, lo que permite controlar el proceso de iteración de manera más flexible.
Relación con keys()/values()/entries()
Estos métodos devuelven iteradores, pero tienen diferentes usos:
keys(): devuelve un iterador de los índices del arrayvalues(): devuelve un iterador de los elementos del array (igual que[Symbol.iterator]()el método [Symbol.iterator]())entries(): devuelve un iterador de pares índice/valor
Compatibilidad del navegador
Array [Symbol.iterator]()El método es compatible en los siguientes entornos:
- Chrome 38+
- Firefox 36+
- Edge 12+
- Safari 9+
- Opera 25+
- Node.js 0.12+
Resumen
Array [Symbol.iterator]()El método es la clave para que los arrays de JavaScript implementen el protocolo iterable. Entender cómo funciona este método puede ayudarte a:
- Entender más profundamente el mecanismo de iteración de JavaScript
- Escribir código de iteración más eficiente
- Personalizar el comportamiento de iteración cuando sea necesario
Recuerda que en la mayoría de los casos no necesitas llamar directamente a este método, porquefor...ofel bucle y otras características del lenguaje lo manejan automáticamente internamente. Pero entender cómo funciona te convertirá en un mejor desarrollador de JavaScript.
Objeto JavaScript Array