1807 Stimmen

Schleife durch ein einfaches JavaScript-Objekt mit den Objekten als Mitglieder

Wie kann ich eine Schleife durch alle Mitglieder in einem JavaScript-Objekt, einschließlich Werte, die Objekte sind?

Wie könnte ich zum Beispiel eine Schleife durchlaufen (und jeweils auf "your_name" und "your_message" zugreifen)?

var validation_messages = {
    "key_1": {
        "your_name": "jimmy",
        "your_msg": "hello world"
    },
    "key_2": {
        "your_name": "billy",
        "your_msg": "foo equals bar"
    }
}

11voto

Kévin Berthommier Punkte 1102

In ES7 können Sie das tun:

for (const [key, value] of Object.entries(obj)) {
  //
}

9voto

Dmitri Farkov Punkte 8543
for(var key in validation_messages){
    for(var subkey in validation_messages[key]){
        //code here
        //subkey being value, key being 'yourname' / 'yourmsg'
    }
}

9voto

Alireza Punkte 92209

Dazu gibt es ein paar Möglichkeiten...

1) Eine zweischichtige for...in-Schleife...

for (let key in validation_messages) {
   const vmKeys = validation_messages[key];
   for (let vmKey in vmKeys) {
      console.log(vmKey + vmKeys[vmKey]);
   }
}

2) Verwendung von Object.key

Object.keys(validation_messages).forEach(key => {
   const vmKeys = validation_messages[key];
   Object.keys(vmKeys).forEach(key => {
    console.log(vmKeys + vmKeys[key]);
   });
});

3) Rekursive Funktion

const recursiveObj = obj => {
  for(let key in obj){
    if(!obj.hasOwnProperty(key)) continue;

    if(typeof obj[key] !== 'object'){
      console.log(key + obj[key]);
    } else {
      recursiveObj(obj[key]);
    }
  }
}

Und nennen Sie es so:

recursiveObj(validation_messages);

6voto

dude Punkte 5101

Eine andere Möglichkeit:

var testObj = {test: true, test1: false};
for(let x of Object.keys(testObj)){
    console.log(x);
}

5voto

JepZ Punkte 1065

Hier kommt die verbesserte und rekursive Version von AgileJon's Lösung ( demo ):

function loopThrough(obj){
  for(var key in obj){
    // skip loop if the property is from prototype
    if(!obj.hasOwnProperty(key)) continue;

    if(typeof obj[key] !== 'object'){
      //your code
      console.log(key+" = "+obj[key]);
    } else {
      loopThrough(obj[key]);
    }
  }
}
loopThrough(validation_messages);

Diese Lösung funktioniert für alle Arten von unterschiedlichen Tiefen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X