Wie kann ich ein JavaScript-Objektarray durchlaufen?

Lesezeit: 3 Minuten

Benutzer-Avatar
Alosius

Ich versuche folgendes durchzuschleifen:

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

Ich möchte abrufen msgFrom und msgBody

Ich habe es versucht:

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

Aber das Konsolenprotokoll wird gedruckt [Object]

Irgendwelche Ideen, was ich falsch mache?

  • console.log(obj, prop);

    – zerkms

    22. Oktober 2013 um 22:21 Uhr

  • Sie sollten im Allgemeinen versuchen, die Verwendung zu vermeiden for..in zum Arrays.

    – Jonathan Lonowski

    22. Oktober 2013 um 22:21 Uhr


  • Der einzige glaubwürdige Grund, for..in nicht mit einem Array zu verwenden, ist, dass die Eigenschaften möglicherweise nicht in der erwarteten Reihenfolge zurückgegeben werden. Ansonsten ist es nicht besser oder schlechter als die Verwendung von for..in für ein anderes Objekt (unerwartete Eigenschaften, Eigenschaften aus der [[Prototype]]etc.).

    – RobG

    22. Oktober 2013 um 22:31 Uhr


Benutzer-Avatar
Jonathan Lonowski

Es sieht so aus, als hätten Sie das gerade verpasst "messages" Eigentum in der dataalso iteriert die Schleife wahrscheinlich die Wurzel Object eher als das Array:

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

Wenn nicht data eingestellt war messages vor dem angegebenen Ausschnitt.

Sie sollten jedoch in Betracht ziehen, dies auf ein normales zu ändern for Schleife für die Array:

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

  • Vielen Dank, dass Sie mir auch dabei geholfen haben, zu einer regulären for-Schleife zu wechseln! Annahme so schnell wie möglich.

    – Alosyius

    22. Oktober 2013 um 22:31 Uhr

  • Warum sollte er erwägen, eine normale zu verwenden for Schleife?

    – Travis Heeter

    19. April 2017 um 13:08 Uhr

  • @TravisHeeter for..in behandelt das Array als einfaches Objekt und iteriert alle aufzählbaren Schlüssel in einer nicht garantierten Reihenfolge, anstatt nur seine Indizes, 0 zu length - 1. Manchmal ist das sogar erwünscht. Normalerweise nicht. – Warum ist die Verwendung von “for…in” mit Array-Iteration eine schlechte Idee?

    – Jonathan Lonowski

    19. April 2017 um 19:33 Uhr


  • @JonathanLonowski Danke, vielleicht kannst du das zu deiner Antwort hinzufügen?

    – Travis Heeter

    19. April 2017 um 20:37 Uhr

  • Dieser ist viel einfacher und effizienter

    – Roll

    26. Januar 2017 um 5:40 Uhr

  • @sandeep rajbhandari kannst du noch einen Schritt weiter gehen und mir sagen, wie ich nur eine Nachricht auf einmal anstatt alle auf einmal zurückgeben kann?

    – PA-GW

    21. August 2020 um 17:35 Uhr

  • Das erfordert ECMA Script 2015 und funktioniert nicht in älteren Browsern und Mobilgeräten.

    – andreszs

    16. Juni 2021 um 12:48 Uhr

Alle hier bereitgestellten Antworten verwenden normale Funktionen, aber heutzutage verwendet der größte Teil unseres Codes Pfeilfunktionen in ES6. Ich hoffe, meine Antwort hilft den Lesern bei der Verwendung der Pfeilfunktion, wenn wir eine Iteration über ein Array von Objekten durchführen

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

Führen Sie .forEach im Array mit der Pfeilfunktion aus

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

Führen Sie .map auf dem Array mit der Pfeilfunktion aus

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

  • Erfordert ECMA Script 2015 und funktioniert nicht in älteren Browsern.

    – andreszs

    16. Juni 2021 um 12:49 Uhr

Benutzer-Avatar
Tarvo Mäesepp

Um ein Objektarray oder nur ein Array in Javascript zu durchlaufen, können Sie Folgendes tun:

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

Es gibt auch die für jede() Funktion, die eher “Javascript-artig” und auch weniger Code, aber komplizierter für ihre Syntax ist:

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

Und beide geben folgendes aus:

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

  • Erfordert ECMA Script 2015 und funktioniert nicht in älteren Browsern.

    – andreszs

    16. Juni 2021 um 12:49 Uhr

In Ihrem Skript sind Daten Ihr gesamtes Objekt.

key ist “messages”, ein Array, das Sie wie folgt durchlaufen müssen:

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

1010170cookie-checkWie kann ich ein JavaScript-Objektarray durchlaufen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy