2011-01-05 4 views
14

Ich versuche, das unten gezeigte JS-Objekt mit dem folgenden Codeschnipsel zu durchlaufen, während ich sowohl den Indexschlüssel als auch das innere Objekt abrufen muss.jQuery: Objekt ordnungsgemäß durchlaufen?

Wie auf der Erde sollte ich das tun, wie das folgende nicht funktioniert?

Das Objekt:

({ prop_1:["1", "2"], 
prop_2:["3", "4"]}) 

Mein Code:

$.each(myObject, function(key,valueObj){ 
    alert(key + "/" + valueObj.toSource()); 
}); 

Erwartete Ausgabe:

prop_1/(["1", "2"]) 

Antwort

22

Das innere Objekt, das Sie in Ordnung sind holen, valueObjist das Array, es hat einfach keine Methode .toSource() (at leas t nicht Cross-Browser sowieso), wenn Sie zu entfernen, dass Sie eine Benachrichtigung erhalten werden:

$.each(myObject, function(key,valueObj){ 
    alert(key + "/" + valueObj); 
}); 

You can test it out here, werden nicht geworfen, dass der Ausgang ist nur:

prop_1/1,2 
prop_2/3,4 

... die Standard .toString() auf einem Array ist eine Komma-getrennte Liste, so dass Sie mit einer alert() sehen. Zum Beispiel, wenn Sie stattdessen alert(key + "/" + valueObj[0]); taten, dann würden Sie sehen:

prop_1/1 
prop_2/3 

... damit Sie sehen können Sie das Array zu tun haben Sie wollen, you can test that here.

3

Sie könnten ein für in-Schleife:

var myObject = ({ prop_1:["1", "2"], prop_2:["3", "4"]}) 
    for (var key in myObject) { 
     if (myObject.hasOwnProperty(key)) { 
      alert(key + "/" + myObject[key]); 
     } 
    } 
+1

Diese Funktionen auch umfassen wird, so sicher sein, sie zu filtern mit 'typeof', wenn Sie sie nicht wollen. (JavaScript, Die guten Teile, 3.7 Enumeration) – mdup