¿Cómo puedo recorrer una matriz de objetos de JavaScript?

3 minutos de lectura

avatar de usuario
Alosyius

Estoy tratando de recorrer lo siguiente:

{
    "messages": [{
        "msgFrom": "13223821242",
        "msgBody": "Hi there"
    }, {
        "msgFrom": "Bill",
        "msgBody": "Hello!"
    }]
}

quiero recuperar msgFrom y msgBody

He intentado:

        for (var key in data) {
           var obj = data[key];
           for (var prop in obj) {
              if(obj.hasOwnProperty(prop)){
                console.log(prop + " = " + obj[prop]);
              }
           }
        }

Pero el registro de la consola imprime [Object]

¿Alguna idea de lo que estoy haciendo mal?

  • console.log(obj, prop);

    – zerkms

    22 oct 2013 a las 22:21

  • Por lo general, querrá tratar de evitar el uso for..in por Arrays.

    – Jonathan Lonowski

    22 oct 2013 a las 22:21


  • La única razón creíble para no usar for..in con un Array es que las propiedades pueden no devolverse en el orden esperado. De lo contrario, no es mejor ni peor que usar for..in en cualquier otro Objeto (propiedades inesperadas, propiedades del [[Prototype]]etc.).

    – RobG

    22/10/2013 a las 22:31


Puede usar el método forEach para iterar sobre una matriz de objetos.

data.messages.forEach(function(message){
    console.log(message)
});

Referirse:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

  • este es mucho más simple y eficiente

    – Roel

    26 de enero de 2017 a las 5:40

  • @sandeep rajbhandari, ¿puede dar un paso más y decirme cómo devolver solo un mensaje a la vez en lugar de todos a la vez?

    – PA-GW

    21 de agosto de 2020 a las 17:35

  • Lo que requiere ECMA Script 2015 y no funcionará en navegadores y dispositivos móviles más antiguos.

    – andreszs

    16 de junio de 2021 a las 12:48

Todas las respuestas proporcionadas aquí usan la función normal, pero en estos días la mayor parte de nuestro código usa funciones de flecha en ES6. Espero que mi respuesta ayude a los lectores sobre cómo usar la función de flecha cuando iteramos sobre una matriz de objetos.

let data = {
      "messages": [{
           "msgFrom": "13223821242",
           "msgBody": "Hi there"
       }, {
          "msgFrom": "Bill",
          "msgBody": "Hello!"
       }]
 }

Hacer .forEach en matriz usando la función de flecha

 data.messages.forEach((obj, i) => {
     console.log("msgFrom", obj.msgFrom);
     console.log("msgBody", obj.msgBody);
 });

Hacer .map en matriz usando la función de flecha

 data.messages.map((obj, i) => {
     console.log("msgFrom", obj.msgFrom);
     console.log("msgBody", obj.msgBody);
 });

  • Requiere ECMA Script 2015 y no funciona en navegadores más antiguos.

    – andreszs

    16 de junio de 2021 a las 12:49

avatar de usuario
Tarvo Maesepp

Para recorrer una matriz de objetos o simplemente una matriz en javascript, puede hacer lo siguiente:

var cars = [{name: 'Audi'}, {name: 'BMW'}, {name: 'Ferrari'}, {name: 'Mercedes'}, {name: 'Maserati'}];

for(var i = 0; i < cars.length; i++) {
    console.log(cars[i].name);
}

También está el para cada() función, que es más “javascript-ish” y también menos código pero más complicada por su sintaxis:

cars.forEach(function (car) {
    console.log(car.name);
});

Y ambos están generando lo siguiente:

// Audi
// BMW
// Ferrari
// Mercedes
// Maserati

  • Requiere ECMA Script 2015 y no funciona en navegadores más antiguos.

    – andreszs

    16 de junio de 2021 a las 12:49

En su script, los datos son su objeto completo.

La clave es “mensajes”, que es una matriz que necesita iterar de esta manera:

    for (var key in data) {
       var arr = data[key];
       for( var i = 0; i < arr.length; i++ ) {
           var obj = arr[ i ];
           for (var prop in obj) {
               if(obj.hasOwnProperty(prop)){
                   console.log(prop + " = " + obj[prop]);
               }
           }
       }
    }

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad