2016-04-25 11 views
0

Angenommen, ich habe mehrere verschachtelte Objekte (human1, human2, human3) in "menschlichen" Objekt.Iterieren Objekt mit Schleife zwischen verschiedenen Datenoptionen

human: { 
    "human1": { 
     "name" : "John", 
     "sex" : "male", 
     "age" : 18 
    } 

    "human2": { 
     "name" : "Peter", 
     "sex" : "male", 
     "age" : 16 
    } 

    "human3": { 
     "name" : "May", 
     "sex" : "female", 
     "age" : 19 
    } 
} 

Und ich habe ein anderes Objekt namens currentPlayer unten, die ich will ein Schiff sein, um die Daten von „human1“ zugreifen zu können, „human2“ oder „human3“ für verschiedene Zwecke.

currentPlayer: { 
    "name" : "default", 
    "sex" : "default", 
    "age" : 0 
} 

Beispiel: ich heute currentPlayer wollen John sein, und es geht

currentPlayer: { 
    "name" : "John", 
    "sex" : "male", 
    "age" : 18 
} 

Und dann will ich currentPlayer Peter sein, und es geht:

currentPlayer: { 
    "name" : "Peter", 
    "sex" : "male", 
    "age" : 16 
} 

Wie kann ich Iterieren Sie Eigenschaftswerte von currentPlayer wie folgt mit einer Schleife, nicht nur nacheinander eingeben? Dank ...

+0

Es ist wirklich nicht klar, was Sie fragen? Fragen Sie, wie Sie das Objekt mit 'name:" John "' in der ersten Datenstruktur finden? Bitte zeigen Sie auch vollständige Objektdefinitionen, nicht nur partielle Objektdefinitionen. Was Sie als 'currentPlayer' anzeigen, ist nur eine Eigenschaft in einem übergeordneten Objekt. – jfriend00

+0

Ich denke, Sie könnten nach etwas wie jQuery.extend() fragen. Es gibt auch eine Nicht-jQuery-Implementierung auf youmightnotneedjquery.com – JonSG

+0

Ich möchte nur Eigenschaftswerte von human1 oder human2 oder human3 in mein existierendes currentPlayer-Objekt kopieren, sorry für nicht klar erklären ... –

Antwort

1

Bellow-Code wird durch alle Eigenschaften des menschlichen Objekt iterieren

listofhuman = Object.getOwnPropertyNames(human); 
var currentPlayer; 
for (var objHumanName in listofhuman) { 
    if (listofhuman[objHumanName].Name === "Jonh") { 
     currentPlayer = Object.create(listofhuman[objHumanName]); 
     break; 
    } 
} 

am Ende dieser Schleife wird Sie ein Mensch bekommen, die Sie

wonted wenn Sie Object.getOwnPropertyNames(currentPlayer) tun dieses Array zurück der Zeichenfolge, die die tatsächlichen Schlüssel im Objekt currentPlayer sind, und Sie können auf diese Werte von currentPlayer[arryofProp[0]] zugreifen

+0

Es scheint, als ob ich 3 Menschen im currentPlayer haben werde, wenn ich diesen Code ausführe, was ich will, ist Eigenschaftswerte in existierendem currentPlayer zu wiederholen, sorry für nicht klare Erklärung. –