Programación
Radzivon Aljovik
Entusiasta de la automatización de bajo código
4 de julio de 2024
Una plataforma de código bajo que combina la simplicidad sin código con el poder del código completo 🚀
Empieza ahora gratis
4 de julio de 2024
7
min leer

¿Cómo iterar sobre un objeto JavaScript?

Radzivon Aljovik
Entusiasta de la automatización de bajo código
Tabla de contenidos.

La iteración sobre objetos es una tarea fundamental en la programación de JavaScript. A diferencia de las matrices, los objetos en JavaScript no son iterables de forma predeterminada, lo que significa que no se pueden usar métodos como forEach(), map() o for...of loop directamente sobre un objeto. Sin embargo, hay varias formas de recorrer las propiedades de un objeto y acceder tanto a las claves como a los valores. En este artículo, exploraremos diferentes métodos para iterar sobre un objeto de JavaScript de manera eficiente, junto con su sintaxis, ejemplos y casos de uso.

Puntos clave:  Los objetos de JavaScript no son iterables de forma inherente, pero existen varios métodos para recorrer sus propiedades en bucle. El bucle for...in es tradicional, pero requiere una comprobación de hasOwnProperty(), mientras que los métodos más nuevos, como Object.entries() con map()/forEach(), Object.keys() con forEach() y Object.values(), ofrecen enfoques más simplificados. El método _.forOwn() de Lodash proporciona una sintaxis conveniente para quienes ya utilizan la biblioteca. La elección del método de iteración depende de los requisitos de compatibilidad del navegador, la legibilidad del código y los casos de uso específicos. Si bien el rendimiento puede variar ligeramente entre los métodos, las diferencias suelen ser insignificantes para la mayoría de las aplicaciones, y los desarrolladores deben priorizar la claridad y la facilidad de mantenimiento del código.

Escribe el código incluso si eres principiante con el Asistente de IA de Latenode

Método 1: Utilizar el bucle for...in

El bucle for...in es una forma tradicional de iterar sobre las propiedades de un objeto. Permite acceder tanto a las claves como a los valores de un objeto. Así es como funciona:

Sintaxis:


for (let key in object) {
  if (object.hasOwnProperty(key)) {
    // Perform operations with key and object[key]
  }
}

Ejemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key + ': ' + person[key]);
  }
}
Output:
name: John
age: 30
city: New York

Es importante utilizar el método hasOwnProperty() dentro del bucle para comprobar si la clave pertenece al objeto en sí y no a su cadena de prototipos. Esto garantiza que solo se iteren las propiedades propias del objeto y se eviten las propiedades heredadas.

El bucle for...in de JavaScript a través de un objeto es una forma sencilla de iterar sobre las propiedades de un objeto. Sin embargo, tiene algunas limitaciones:

  • Itera sobre todas las propiedades enumerables de un objeto, incluidas las heredadas de la cadena de prototipos. Por eso es necesario utilizar hasOwnProperty() para filtrar las propiedades heredadas.
  • No se garantiza el orden de iteración. Es posible que no se acceda a las propiedades en el mismo orden en que se definieron.

A pesar de estas limitaciones, el bucle for...in sigue siendo un método comúnmente utilizado para la iteración de objetos debido a su simplicidad y su amplio soporte de navegadores.

Método 2: Utilizando el método Object.entries() y el método map()

El método Object.entries() es una nueva incorporación a JavaScript (introducida en ECMAScript 2017) que devuelve una matriz de pares de propiedades enumerables con clave de cadena [clave, valor] de un objeto determinado. Luego podemos usar el método map() para iterar sobre la matriz y acceder a las claves y los valores.

Sintaxis:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key + ': ' + person[key]);
  }
}
Output:
name: John
age: 30
city: New York

Ejemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key + ': ' + person[key]);
  }
}
Output:
name: John
age: 30
city: New York

El método Object.entries() proporciona una forma conveniente de obtener una matriz de pares clave-valor de un objeto. Al combinarlo con el método map(), puede iterar fácilmente sobre la matriz y realizar operaciones en cada par clave-valor.

Una ventaja de usar Object.entries() es que solo devuelve las propiedades enumerables propias del objeto, excluyendo cualquier propiedad heredada de la cadena de prototipos. Esto elimina la necesidad de una comprobación adicional de hasOwnProperty().

Sin embargo, tenga en cuenta que Object.entries() no es compatible con navegadores más antiguos (como Internet Explorer). Si la compatibilidad del navegador es un problema, es posible que deba utilizar un polyfill o un método alternativo.

Para obtener más información sobre Object.entries(), puede consultar Documentación MDN.

Método 3: Utilizar el método forEach() y el método Object.keys()

El método Object.keys() devuelve una matriz de nombres de propiedades enumerables (claves) de un objeto determinado. Podemos utilizar el método forEach() para iterar sobre la matriz de claves y acceder a los valores correspondientes mediante las claves.

Sintaxis:



Object.keys(object).forEach(key => {
  // Perform operations with key and object[key]
});

Ejemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

Object.keys(person).forEach(key => {
  console.log(key + ': ' + person[key]);
});
Output:
name: John
age: 30
city: New York

El uso de Object.keys() en combinación con forEach() proporciona una forma de iterar sobre las claves de un objeto y acceder a los valores correspondientes. Este método es útil cuando solo necesita las claves de un objeto y desea realizar operaciones basadas en esas claves.

Similar a Object.entries(), Object.keys() solo devuelve las propiedades enumerables del propio objeto, por lo que no es necesario utilizar hasOwnProperty() para filtrar las propiedades heredadas.

Para obtener más información sobre Object.keys(), puede consultar Documentación MDN.

Método 4: Utilizar el método _.forOwn() de Lodash

Lodash es una biblioteca de utilidades popular que proporciona un conjunto de funciones útiles para trabajar con objetos y matrices. Si ya utiliza Lodash en su proyecto, puede aprovechar su método _.forOwn() para iterar sobre las propiedades propias de un objeto.

Sintaxis:



_.forOwn(object, (value, key) => {
  // Perform operations with key and value
});


Ejemplo:



const _ = require('lodash');

const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

_.forOwn(person, (value, key) => {
  console.log(key + ': ' + value);
});
Output:
name: John
age: 30
city: New York

El método _.forOwn() itera sobre las propiedades enumerables de un objeto y proporciona el valor y la clave a la función de devolución de llamada. Es una alternativa conveniente al bucle for...in a través de object.entries javascript cuando ya está usando Lodash en su proyecto.

Tenga en cuenta que para utilizar Lodash es necesario instalar la biblioteca e importarla en su proyecto. Si no utiliza Lodash para otros fines, es posible que no sea necesario incluirlo únicamente para la iteración de objetos.

Para obtener más información sobre Lodash y sus métodos de iteración de objetos mediante bucles js, puede consultar Documentación de Lodash.

Método 5: Utilizar el método Object.values() y el método forEach()

El método Object.values() devuelve una matriz de valores de propiedades enumerables de un objeto determinado. Podemos utilizar el método forEach() para iterar a través del código JavaScript del objeto sobre la matriz de valores. Si también necesitas las claves correspondientes, puedes utilizar el método Object.keys() en conjunto.

Sintaxis:



Object.values(object).forEach((value, index) => {
  const key = Object.keys(object)[index];
  // Perform operations with key and value
});

Ejemplo:



const person = {
  name: 'John',
  age: 30,
  city: 'New York'
};

Object.values(person).forEach((value, index) => {
  const key = Object.keys(person)[index];
  console.log(key + ': ' + value);
});
Output:
name: John
age: 30
city: New York

El uso de Object.values() le permite iterar sobre los valores de un objeto directamente. Si también necesita las claves correspondientes, puede obtenerlas utilizando Object.keys() y accediendo a la clave en el mismo índice que el valor.

Este método es útil cuando necesita trabajar principalmente con los valores de un objeto y, opcionalmente, acceder a las claves cuando sea necesario.

Para obtener más información sobre Object.values(), puede consultar Documentación MDN.

Terminando

En este artículo, exploramos varios métodos para iterar sobre un objeto iterativo de JavaScript. Cada método tiene sus propias ventajas y casos de uso:

  • El bucle for...in es una forma tradicional de iterar sobre un objeto de JavaScript. Es simple y ampliamente compatible, pero requiere una comprobación adicional de hasOwnProperty() para evitar iterar sobre propiedades heredadas.
  • El método Object.entries(), combinado con map() o forEach(), proporciona una forma concisa de acceder tanto a las claves como a los valores de un objeto. Elimina la necesidad de hasOwnProperty(), pero es posible que no sea compatible con navegadores más antiguos.
  • El método Object.keys(), junto con forEach(), permite iterar sobre las claves de un objeto y acceder a los valores correspondientes. Resulta útil cuando se necesita trabajar principalmente con las claves.
  • El método _.forOwn() de Lodash es una opción conveniente si ya está utilizando Lodash en su proyecto. Proporciona una sintaxis clara para iterar sobre las propiedades propias de un objeto.
  • El método Object.values(), junto con forEach(), se centra en iterar sobre los valores de un objeto foreach. Puedes utilizar Object.keys() en conjunto si también necesitas las claves.

Al elegir un método para iterar sobre un objeto de JavaScript, tenga en cuenta factores como la compatibilidad del navegador, la legibilidad del código y los requisitos específicos de su caso de uso. Independientemente del método que elija, comprender cómo iterar eficazmente sobre los objetos es fundamental para una programación eficiente en JavaScript.

Escribe el código incluso si eres principiante con el Asistente de IA de Latenode

Preguntas Frecuentes

¿Cuál es la diferencia entre for...in y Object.entries()?

El bucle for...in itera sobre todas las propiedades enumerables de un objeto, incluidas las heredadas de la cadena de prototipos. Requiere una comprobación adicional con hasOwnProperty() para evitar iterar sobre las propiedades heredadas. Por otro lado, Object.entries() devuelve una matriz de pares de propiedades enumerables con clave de cadena [clave, valor] de un objeto determinado, que se pueden iterar fácilmente utilizando métodos como map() o forEach(). Object.entries() solo incluye las propiedades propias del objeto, excluyendo las heredadas.

¿Qué método debo utilizar si solo necesito claves o solo valores?

Si solo necesita las claves de un objeto iterativo de js, puede usar el método Object.keys(), que devuelve una matriz de los nombres de propiedades enumerables (claves) de un objeto determinado. Si solo necesita los valores, puede usar el método Object.values(), que devuelve una matriz de los valores de propiedades enumerables de un objeto determinado.

¿Qué método es más rápido o más eficiente?

El rendimiento de los distintos métodos puede variar según el motor de JavaScript y el tamaño del objeto. En general, el bucle for...in se considera ligeramente más rápido que el uso de métodos como Object.entries() u Object.keys() con forEach(). Sin embargo, la diferencia de rendimiento suele ser insignificante, a menos que se trate de objetos extremadamente grandes. Se recomienda priorizar la legibilidad y la facilidad de mantenimiento del código, a menos que se tengan requisitos de rendimiento específicos.

¿Cómo puedo iterar sobre las entradas de un objeto conservando el orden de las claves?

Los objetos en JavaScript no están ordenados de forma predeterminada y el orden de las claves no está garantizado. Si necesita iterar sobre las propiedades de un objeto en un orden específico, tiene algunas opciones:

  • Utilice el método Object.entries() para obtener una matriz de pares [clave, valor], ordenar la matriz según las claves y luego iterar sobre la matriz ordenada.
  • Cree una matriz de claves en el orden deseado y luego acceda a los valores correspondientes del objeto utilizando esas claves.
  • Utilice un mapa en lugar de un objeto, ya que el mapa mantiene el orden de inserción de los pares clave-valor. Puede convertir un objeto en un mapa utilizando new Map(Object.entries(object)).

¿Puedo utilizar funciones de flecha con estos métodos de iteración?

Sí, puedes usar funciones de flecha con métodos como map(), forEach() y _.forOwn(). Las funciones de flecha proporcionan una sintaxis concisa para escribir expresiones de función. Por ejemplo:



Object.entries(person).map(([key, value]) => {
  console.log(key + ': ' + value);
});


Sin embargo, tenga en cuenta que las funciones de flecha tienen un enlace this léxico, lo que significa que heredan el valor this del ámbito circundante. Si necesita acceder al contexto this dentro de la devolución de llamada de iteración, es posible que deba usar una expresión de función regular.

¿Existen otras bibliotecas o métodos para la iteración de objetos?

Sí, existen otras bibliotecas y métodos que brindan utilidades para la iteración de objetos. Algunos de los más populares son:

  • Underscore.js: proporciona el método _.each() para iterar sobre objetos.
  • Lodash: ofrece varios métodos como _.forOwn(), _.forIn() y _.forEach() para la iteración de objetos.
  • jQuery: tiene el método $.each() que se puede utilizar para iterar sobre objetos.

Estas bibliotecas ofrecen funciones adicionales y pueden resultar útiles si ya las utiliza en su proyecto. Sin embargo, si solo necesita una iteración básica de objetos, los métodos nativos de JavaScript que se describen en este artículo son suficientes.

Recuerde que la elección del método de iteración depende de sus requisitos específicos, de la base de código y de sus preferencias personales. Experimente con distintos enfoques y elija el que mejore la legibilidad, la facilidad de mantenimiento y la eficiencia del código en su caso de uso particular.

Aplicación unoAplicación dos

Probar ahora

Blogs relacionados

Caso de uso

Respaldado por