Iterieren der Eigenschaften eines JavaScript-Objekts mit jQuery

116

Gibt es eine jQuery-Möglichkeit, eine Iteration über die Mitglieder eines Objekts durchzuführen, z.

    for (var member in obj) {
        ...
    }

Ich mag es einfach nicht, wenn dies foraus meiner schönen jQuery-Notation herausragt!

tags2k
quelle

Antworten:

210
$.each( { name: "John", lang: "JS" }, function(i, n){
    alert( "Name: " + i + ", Value: " + n );
});

jeder

Tim Büthe
quelle
Ich denke auch, dass die Alarmierung nnicht ganz korrekt ist. Zumindest könnte es seinn.name
Eugene
2
@ Eugene: Ich verstehe deinen Standpunkt nicht. Jede Funktion verwendet ein Array oder Objekt als erstes Argument und eine Funktion als zweites. Diese Funktion wird für jedes Element im Array / jede Eigenschaft im Objekt aufgerufen. Bei jedem Aufruf der Funktion werden Index und Wert / Name und Wert als Argumente übergeben. In meinem Beispiel sind die Parameter "n" die beiden Zeichenfolgen "John" und "JS". Die Eigenschaft "name" wäre "undefined".
Tim Büthe
Ja. Ich habe mich hier geirrt. Irgendwie dachte ich, dass jede Eigenschaft im Objekt ein anderes Objekt ist, zum Beispiel mit dem Eigenschaftsnamen, der eine Zeichenfolge ist. Natürlich ist das alles falsch. So leid. :)
Eugene
4
Jeder hat viel mehr Funktionen: thisist auch n. return falsebricht jede Schleife ...
andy
56

Sie können auch eachfür Objekte und nicht nur für Arrays verwenden:

var obj = {
    foo: "bar",
    baz: "quux"
};
jQuery.each(obj, function(name, value) {
    alert(name + ": " + value);
});
Gumbo
quelle
9

Diese Methode geht die Objekteigenschaften durch und schreibt sie mit zunehmendem Einzug in die Konsole:

function enumerate(o,s){

    //if s isn't defined, set it to an empty string
    s = typeof s !== 'undefined' ? s : "";

    //iterate across o, passing keys as k and values as v
    $.each(o, function(k,v){

        //if v has nested depth
        if(typeof v == "object"){

            //write the key to the console
            console.log(s+k+": ");

            //recursively call enumerate on the nested properties
            enumerate(v,s+"  ");

        } else {

            //log the key & value
            console.log(s+k+": "+String(v));
        }
    });
}

Übergeben Sie einfach das Objekt, durch das Sie iterieren möchten:

var response = $.ajax({
    url: myurl,
    dataType: "json"
})
.done(function(a){
   console.log("Returned values:");
   enumerate(a);
})
.fail(function(){ console.log("request failed");});
Jonathanbruder
quelle
Verwenden Sie diese Option, wenn ein Wert null ist. Fehler mit "Uncaught TypeError: Eigenschaft 'Länge' von null kann nicht gelesen werden"
JustinStolle
3

Spät, kann aber mit Object.keys wie

var a={key1:'value1',key2:'value2',key3:'value3',key4:'value4'},
  ulkeys=document.getElementById('object-keys'),str='';
var keys = Object.keys(a);
for(i=0,l=keys.length;i<l;i++){
   str+= '<li>'+keys[i]+' : '+a[keys[i]]+'</li>';
}
ulkeys.innerHTML=str;
<ul id="object-keys"></ul>

Rohan Kumar
quelle