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 del código cero con la potencia del código completo 🚀.
Empieza 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
Índice

Iterar sobre objetos es una tarea fundamental en la programación en JavaScript. A diferencia de las matrices, los objetos en JavaScript no son iterables por defecto, lo que significa que no puedes utilizar 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 distintos métodos para iterar sobre un objeto JavaScript de forma eficiente, junto con su sintaxis, ejemplos y casos de uso.

Puntos clave: Los objetos JavaScript no son intrínsecamente iterables, pero existen varios métodos para recorrer sus propiedades. El bucle for...in es tradicional pero requiere una comprobación hasOwnProperty(), mientras que métodos más recientes como Object.entries() con map()/forEach(), Object.keys() con forEach() y Object.values() ofrecen enfoques más ágiles. El método _.forOwn() de Lodash proporciona una sintaxis cómoda 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. Aunque el rendimiento puede variar ligeramente de un método a otro, las diferencias suelen ser insignificantes para la mayoría de las aplicaciones, y los desarrolladores deben dar prioridad a la claridad y la facilidad de mantenimiento del código.

Escribe el código aunque seas principiante con Latenode's AI Assistent

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

El bucle for...in es una forma tradicional de iterar sobre las propiedades de un objeto. Te permite acceder tanto a las claves como a los valores de un objeto. Funciona así

Sintaxis:


for (let clave en objeto) {
  if (objeto.hasOwnProperty(clave)) {
    // Realiza operaciones con la clave y el objeto[clave]
  }
}

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 propio objeto y no a su cadena de prototipos. Así te aseguras de que sólo iteras sobre las propiedades propias del objeto y evitas cualquier propiedad heredada.

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

  • Recorre 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.
  • El orden de iteración no está garantizado. Puede que no se acceda a las propiedades en el mismo orden en que fueron definidas.

A pesar de estas limitaciones, el bucle for...in sigue siendo un método muy utilizado para la iteración de objetos, debido a su sencillez y a la amplia compatibilidad con los navegadores.

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

El método Object.entries() es una adición más reciente a JavaScript (introducida en ECMAScript 2017) que devuelve una matriz de pares de propiedades [clave, valor] enumerables de cadena propia de un objeto dado. Podemos utilizar el método map() para iterar sobre la matriz y acceder a las claves y 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 cómoda de obtener una matriz de pares clave-valor de un objeto. Combinándolo con el método map(), puedes iterar fácilmente sobre la matriz y realizar operaciones sobre cada par clave-valor.

Una ventaja de utilizar Object.entries() es que sólo 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, ten en cuenta que Object.entries() no es compatible con navegadores antiguos (como Internet Explorer). Si la compatibilidad del navegador es un problema, puede que necesites utilizar un polyfill o un método alternativo.

Para más información sobre Object.entries(), puedes consultar la documentación del MDN.

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

El método Object.keys() devuelve una matriz de nombres de propiedades enumerables propias de un objeto dado (claves). Podemos utilizar el método forEach() para iterar sobre la matriz de claves y acceder a los valores correspondientes utilizando 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

Utilizar 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 sólo necesitas las claves de un objeto y quieres realizar operaciones basadas en esas claves.

De forma similar a Object.entries(), Object.keys() sólo devuelve las propiedades enumerables propias del objeto, por lo que no necesitas utilizar hasOwnProperty() para filtrar las propiedades heredadas.

Para más información sobre Object.keys(), puedes consultar la documentación del MDN.

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

Lodash es una popular biblioteca de utilidades que proporciona un conjunto de útiles funciones para trabajar con objetos y matrices. Si ya utilizas Lodash en tu proyecto, puedes 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 propias de un objeto y proporciona el valor y la clave a la función de devolución de llamada. Es una alternativa cómoda al bucle for...in a través de javascript object.entries cuando ya estás utilizando Lodash en tu proyecto.

Ten en cuenta que utilizar Lodash requiere instalar la biblioteca e importarla a tu proyecto. Si no utilizas Lodash para otros fines, puede que no sea necesario incluirlo únicamente para la iteración de objetos.

Para más información sobre Lodash y sus métodos de iteración de objetos en bucle js, puedes consultar la 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 con los valores de las propiedades enumerables propias de un objeto dado. Podemos utilizar el método forEach() para iterar en javascript objeto sobre la matriz de valores. Si además necesitas las claves correspondientes, puedes utilizar conjuntamente el método Object.keys().

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

Utilizar Object.values() te permite iterar sobre los valores de un objeto directamente. Si además necesitas las claves correspondientes, puedes obtenerlas utilizando Object.keys() y accediendo a la clave en el mismo índice que el valor.

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

Para más información sobre Object.values(), puedes consultar la documentación MDN.

Para terminar

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

  • El bucle for...in es una forma tradicional de iterar sobre objetos javascript. Es sencillo 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 puede no ser compatible con navegadores antiguos.
  • El método Object.keys(), junto con forEach(), permite iterar sobre las claves de un objeto y acceder a los valores correspondientes. Es útil cuando necesitas trabajar principalmente con las claves.
  • El método Lodash _.forOwn() es una opción práctica si ya utilizas Lodash en tu proyecto. Proporciona una sintaxis limpia 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. Puedes utilizar conjuntamente Object.keys() si también necesitas las claves.

Al elegir un método para iterar sobre un objeto JavaScript, ten en cuenta factores como la compatibilidad del navegador, la legibilidad del código y los requisitos específicos de tu caso de uso. Sea cual sea el método que elijas, comprender cómo iterar eficazmente sobre los objetos es crucial para una programación eficiente en JavaScript.

Escribe el código aunque seas principiante con Latenode's AI Assistent

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 propiedades heredadas. Por otra parte, Object.entries() devuelve una matriz de pares de propiedades enumerables [clave, valor] de cadena propia de un objeto dado, sobre las que se puede iterar fácilmente utilizando métodos como map() o forEach(). Object.entries() sólo incluye las propiedades propias del objeto, excluyendo las heredadas.

¿Qué método debo utilizar si sólo necesito claves o sólo valores?

Si sólo necesitas las claves de un objeto js iterado, puedes utilizar el método Object.keys(), que devuelve una matriz de nombres de propiedades enumerables propias de un objeto dado (claves). Si sólo necesitas los valores, puedes utilizar el método Object.values(), que devuelve una matriz de valores de propiedades enumerables propias de un objeto dado.

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

El rendimiento de los distintos métodos puede variar en función del motor JavaScript y del tamaño del objeto. En general, se considera que el bucle for...in es ligeramente más rápido que utilizar métodos como Object.entries() u Object.keys() con forEach(). Sin embargo, la diferencia de rendimiento suele ser insignificante a menos que trates con objetos extremadamente grandes. Se recomienda dar prioridad a la legibilidad y mantenibilidad del código, a menos que tengas requisitos específicos de rendimiento.

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

Los objetos en JavaScript no están ordenados por defecto, y el orden de las claves no está garantizado. Si necesitas iterar sobre las propiedades de un objeto en un orden específico, tienes algunas opciones:

  • Utiliza el método Object.entries() para obtener una matriz de pares [clave, valor], ordena la matriz en función de las claves y, a continuación, itera sobre la matriz ordenada.
  • Crea una matriz de claves en el orden deseado y luego accede a los valores correspondientes del objeto utilizando esas claves.
  • Utiliza un Mapa en lugar de un objeto, ya que el Mapa mantiene el orden de inserción de los pares clave-valor. Puedes convertir un objeto en un Mapa utilizando nuevo Mapa(Objeto.entradas(objeto)).

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

Sí, puedes utilizar 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, ten en cuenta que las funciones de flecha tienen un enlace léxico this, lo que significa que heredan el valor this del ámbito circundante. Si necesitas acceder al contexto this dentro de la llamada de retorno de la iteración, puede que tengas que utilizar una expresión regular de función en su lugar.

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

Sí, existen otras bibliotecas y métodos que proporcionan utilidades para la iteración de objetos. Algunas de las 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 puede utilizarse para iterar sobre objetos.

Estas bibliotecas ofrecen funcionalidad adicional y pueden ser útiles si ya las estás utilizando en tu proyecto. Sin embargo, si sólo necesitas una iteración básica de objetos, los métodos nativos de JavaScript que se tratan en este artículo son suficientes.

Recuerda que la elección del método de iteración depende de tus requisitos específicos, de tu código base y de tus preferencias personales. Experimenta con distintos enfoques y elige el que mejore la legibilidad, la mantenibilidad y la eficacia del código en tu caso de uso concreto.

Blogs relacionados

Caso práctico

Respaldado por