Подтвердить что ты не робот

Javascript цикл через массив объектов?

Я пытаюсь выполнить следующее:

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

Я хочу получить msgFrom и msgBody

Я пробовал:

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

Но журнал консоли печатает [Object]

Любые идеи, что я делаю неправильно?

4b9b3361

Ответ 1

Похоже, вы просто пропустили свойство "messages" в data, поэтому цикл, скорее всего, будет итерации root Object, а не Array:

for (var key in data.messages) {
    var obj = data.messages[key];
    // ...
}

Если data не был установлен на messages до данного фрагмента.

Однако, вы должны рассмотреть возможность изменения этого на обычный цикл for для Array:

for (var i = 0, l = data.messages.length; i < l; i++) {
    var obj = data.messages[i];
    // ...
}

Ответ 2

В вашем script данные - это весь ваш объект.

Клавиша

- это "сообщения", которые представляют собой массив, который необходимо выполнить для повторения:

    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]);
               }
           }
       }
    }

Ответ 4

Предлагаемый цикл цикла довольно хорош, но вы должны проверить свойства с помощью hasOwnProperty. Я бы предпочел использовать Object.keys(), который возвращает только "собственные свойства" объекта (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)

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

data.messages.forEach(function(message, index) {
    console.log('message index '+ index);
    Object.keys(message).forEach(function(prop) {    
        console.log(prop + " = " + message[prop]);
    });
});

Ответ 5

Ссылка на содержимое одного массива, содержащего один или несколько объектов, то есть все в скобках чего-то вроде этого {messages: [{ "a": 1, "b": 2}]}, просто добавьте [0] в запрос, чтобы получить первый элемент массива

например. сообщения [0] будут ссылаться на объект { "a": 1, "b": 2} в отличие от сообщений, которые будут ссылаться на весь массив [{ "a": 1, "b": 2}]

оттуда вы можете работать с результатом как типичный объект и использовать Object.keys, например, для получения "a" и "b".