El forEach()
loop se introdujo en ES6 (ECMAScript 2015) y ejecuta la función dada una vez para cada elemento en una matriz en orden ascendente. No ejecuta la función de devolución de llamada para elementos de matriz vacíos.
Puede usar este método para iterar a través de matrices y NodeLists en JavaScript.
Recorriendo Arrays
Esta es la sintaxis de Array.forEach()
método:
array.forEach(callback(currentVal [, index [, array]])[, thisVal])
La función de devolución de llamada acepta entre uno y tres argumentos:
currentVal
— El valor del elemento actual en el bucleindex
— El índice de la matriz del elemento actualarray
— El objeto matriz elforEach()
se invocó el bucle
Solo se requiere el primer argumento. Los otros dos argumentos son opcionales. Puedes nombrar estas variables como quieras. Si el thisVal
se proporciona el argumento, se utilizará como devolución de llamada this
valor.
El siguiente ejemplo demuestra cómo puede usar el forEach()
bucle para iterar a través de una matriz en JavaScript:
const birds = ['🐦', '🦅', '🦆', '🦉'];
birds.forEach((item, index) => {
console.log(`${index} : ${item}`);
});
Aquí está la salida:
0 : 🐦
1 : 🦅
2 : 🦆
3 : 🦉
Veamos otra matriz de ejemplo que contiene valores vacíos:
const partialArray = [2, 4, , 3];
partialArray.forEach(num => console.log(num));
// output
// 2
// 4
// 3
Como puede ver arriba, la función de devolución de llamada se omite para el valor vacío.
El Array.forEach()
método solo funciona para matrices, y no para NodeLists. Significa que no puede usarlo para recorrer los elementos que obtiene usando document.querySelectorAll()
y métodos de selección similares.
Recorriendo las listas de nodos
Afortunadamente, NodeList
también proporciona un forEach()
método que es similar a Array.forEach()
, pero solo funciona para NodeLists como se muestra en el siguiente ejemplo:
const elems = document.querySelectorAll('div');
elems.forEach((elem, index) => {
console.log(elem); // the elment
console.log(index); // the index in the NodeList
});
Omitir elementos
En un for
bucle, puede omitir fácilmente el elemento actual utilizando el continue
palabra clave o use break
para detener el bucle por completo.
Pero ese no es el caso con el forEach()
método. Dado que ejecuta una función de devolución de llamada para cada elemento, no hay forma de detenerlo o interrumpirlo más que lanzar una excepción.
Sin embargo, puede verificar condicionalmente el valor del artículo y usar el return
instrucción para omitir el elemento actual. Por ejemplo, si desea registrar el nombre de todos los pájaros en la consola excepto Búho, debe hacer lo siguiente:
const birds = ['Eagle', 'Parrot', 'Owl', 'Sparrow'];
birds.forEach((item, index) => {
// if `Owl`, skip it
if (item === 'Owl') {
return;
}
// otherwise log the bird name
console.log(item);
});
Compatibilidad del navegador
El Array.forEach()
La función funciona bien en todos los navegadores modernos, incluido Internet Explorer 9 y superior. Sin embargo, puede usar un polyfill para hacerlo compatible hasta IE6.
El NodeList.forEach()
El método también es compatible con todos los navegadores más recientes, excepto Internet Explorer. Necesitas un polyfill para seguir usándolo en IE.