Guía y comprobaciones
Empieza por la finalidad
Para leer valores, for...of expresa un recorrido directo. Para obtener también la posición, entries entrega parejas de índice y valor. Si necesitas construir otra lista, map hace visible esa transformación.
const nombres = ['Ana', 'Luis'];
for (const [indice, nombre] of nombres.entries()) {
console.log(indice + ': ' + nombre);
}
// 0: Ana
// 1: Luis
const longitudes = nombres.map(nombre => nombre.length);
console.log(JSON.stringify(longitudes)); // [3,4]
Detenerse al encontrar algo
Un bucle permite break. forEach no ofrece esa salida anticipada mediante un return de su callback; ese retorno termina sólo la llamada actual. Para buscar, considera find o some según quieras un valor o una respuesta booleana.
const cantidades = [2, 5, 8];
let primera = null;
for (const cantidad of cantidades) {
if (cantidad > 4) {
primera = cantidad;
break;
}
}
console.log(primera); // 5
Propiedades y huecos
for...in recorre claves enumerables, no está diseñado como sustituto directo del recorrido de valores de una lista. Un array también puede tener propiedades ajenas a sus índices. Además, los métodos no tratan igual las posiciones vacías de un array disperso; evita crearlas si no forman parte del modelo de datos.
No cambies la longitud o elimines posiciones durante un recorrido sin razonar el efecto sobre los índices. Cuando necesitas conservar sólo algunos elementos, filter expresa la selección con menos riesgo de saltarte uno al compactar la lista.
Trabajo asíncrono
Un callback async pasado a forEach no hace que el bucle espere todas sus promesas. Para operaciones secuenciales, un for...of con await permite esperar cada una. Si las operaciones son independientes, puedes reunir promesas con una estrategia de concurrencia limitada; lanzarlas todas a la vez no es siempre apropiado para una API o para archivos grandes.
Preguntas frecuentes
¿return dentro de forEach rompe el bucle?
No. Sólo termina ese callback; utiliza un bucle, some o find según la finalidad.
¿map cambia el array original?
Devuelve otro array con los resultados, aunque tu callback aún podría modificar objetos compartidos si lo programas así.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.