Ejemplo fácil de cómo usar forEach en JavaScript

¿Cómo usar forEach en JavaScript?

El método forEach invoca la función indicada una vez por cada elemento de un Array.

Sintaxis de forEach

A continuación te muestro la sintaxis completa:

array.forEach(callback(elemento, indice, array), thisArg)

Pero mi propósito con este artículo es que aprendas a utilizar los usos más comunes de forEach, así que te explicaré una sintaxis simplificada.

array.forEach(callback(elemento, indice))

Función callback: la función a invocar en cada elemento del array.

  • elemento: el valor del elemento actual
  • indice: el índice del elemento actual

Ejemplo sencillo para aprender a usar forEach

Te presento un ejemplo fácil de entender para ilustrar cómo funciona forEach. Uno de los usos más sencillos para forEach es el de mostrar cada elemento de un Array a la consola.

const frutas = [
  'Banana', 
  'Uva', 
  'Durazno',
  'Manzana', 
  'Fresa'
];

frutas.forEach(function(elemento, indice) {
  console.log(`El valor ${elemento} se encuentra en el indice ${indice}`);
});

// El resultado es:
// El valor Banana se encuentra en el indice 0
// El valor Uva se encuentra en el indice 1
// El valor Durazno se encuentra en el indice 2
// El valor Manzana se encuentra en el indice 3
// El valor Fresa se encuentra en el indice 4

forEach siempre devuelve undefined

El valor que forEach retorna es undefined. Es importante que estés consciente de este hecho, de lo contrario, puedes encontrar resultados inesperados.

Trata de identificar el problema en el siguiente ejemplo:

let numeros = [1, 2, 3, 4, 5];

const dobles = numeros.forEach(function(num) {
  return num * 2;
});

console.log(dobles);

¿Qué valor esperas que se encuentre en dobles? El valor no es un array con [2, 4, 6, 8, 10].

Si intentas ejecutar este código, verás que se muestra undefined a la consola. ¿La razón? forEach siempre devuelve undefined.

forEach se salta espacios vacíos

En el siguiente ejemplo presta especial atención los “espacios vacíos”, es decir, donde se encuentran 2 comas seguidas , , En el array tenemos 2 espacios vacíos.

const lenguajes = ['javascript', ,'python', , 'ruby'];

lenguajes.forEach(function(lenguaje) {
  console.log(lenguaje);
});

// El resultado es:
// javascript
// python
// ruby

Con forEach por cada iteración ejecutamos una función. Con el array en lenguajes, al llegar al segundo elemento, forEach se lo salta. Y lo mismo hace con el cuarto elemento.

¿Cómo iterar sobre un Objeto con forEach?

Puedes utilizar forEach en Objetos.

const obj = {
  nombre: 'Leo',
  empresa: 'ABC Company',
  trabajo: 'Desarrollador'
};

Object.keys(obj).forEach(function (key) {
  console.log(`El valor ${obj[key]} se encuentra en la llave ${key}`);
});

// El resultado es:
// El valor Leo se encuentra en la llave nombre
// El valor ABC Company se encuentra en la llave empresa
// El valor Desarrollador se encuentra en la llave trabajo

Este código extrae el valor de cada propiedad usando todas las llaves del objeto e iterando sobre ellas usando forEach y lo muestra en la consola.

Uncaught TypeError: obj.forEach is not a function ❌

El error Uncaught TypeError: obj.forEach is not a function sucede cuando intentas utilizar el método forEach() en algo que no es tipo array.

Tal vez tienes algo parecido a esto:

const obj = {
  nombre: 'Leo',
  empresa: 'ABC Company',
  trabajo: 'Desarrollador'
};

obj.forEach(function (elem) {
  console.log(elem);
});

// Resulta en el error
// Uncaught TypeError: obj.forEach is not a function ❌

¿Puedes identificar la raíz del fallo?

Se está intentando invocar a forEach en un objeto. Lo mismo sucedería si trataras de invocar forEach en un valor tipo cadena de texto (string), tipo numérico, tipo booleano u otro tipo.

¿Cómo se puede resolver este fallo? ✅

Si intentaste utilizar forEach en un objeto, tal vez lo que quisiste hacer es iterar sobre las propiedades del objeto. Si es este el caso, aplica el método Object.keys de la siguiente manera:

const obj = {
  nombre: 'Leo',
  empresa: 'ABC Company',
  trabajo: 'Desarrollador'
};

console.log(Object.keys(obj)); // ['nombre', 'empresa', 'trabajo']

Object.keys(obj).forEach(function (key) { 
  console.log(key); // ✅ nombre, empresa, trabajo
});

Puedes conseguir un array de las llaves del objeto usando el método Object.keys.

Quizás intentabas iterar sobre los valores de cada propiedad del objeto. En ese caso, aplica el método Object.values de la siguiente manera:

const obj = {
  nombre: 'Leo',
  empresa: 'ABC Company',
  trabajo: 'Desarrollador'
};

console.log(Object.values(obj)); // ['Leo', 'ABC Company', 'Desarrollador']

Object.values(obj).forEach(function (value) { 
  console.log(value); // ✅ Leo, ABC Company, Desarrollador
});

Puedes conseguir un array de los valores en el objeto usando el método Object.values.

Si lo que buscas es tanto las llaves como los valores en el objeto, entonces utiliza Object.entries.

El método Object.entries te proporciona un array de arrays con las llaves y los valores del objeto, de la siguiente manera:

const obj = {
  nombre: 'Leo',
  empresa: 'ABC Company',
  trabajo: 'Desarrollador'
};

console.log(Object.entries(obj)); 

// El resultado es:
// [
//   ['nombre', 'Leo'],
//   ['empresa', 'ABC Company'],
//   ['trabajo', 'Desarrollador']
// ]

Uncaught TypeError: Cannot read properties of undefined (reading forEach) ❌

El fallo Uncaught TypeError: Cannot read properties of undefined (reading 'forEach') ocurre cuando pretendes invocar el método forEach() en el valor undefined.

He aquí un ejemplo de cómo este error puede suceder:

let arr;

arr.forEach(function (elem) {
  console.log(elem);
});

// Resulta en el error
// Uncaught TypeError: Cannot read properties of undefined (reading 'forEach') ❌ 

¿Puedes reconocer el problema?

La variable arr tiene el valor undefined.

Similar Posts