2009-07-08 12 views

Odpowiedz

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

each

+0

Również Myślę, że ostrzeganie 'n' nie jest poprawna intirely . Przynajmniej może to być 'n.nazwa' – Eugene

+2

@Eugena: Nie rozumiem. Każda funkcja przyjmuje tablicę lub obiekt jako pierwszy argument, a funkcję jako drugą. Ta funkcja pobiera calld dla każdego elementu w tablicy/każdej właściwości w obiekcie. Za każdym razem, gdy funkcja jest wywoływana, otrzymuje indeks, a wartość/nazwa i wartość przekazywane są jako argumenty. W moim przykładzie parametr "n" to dwa ciągi "John" i "JS". Właściwość "nazwa" będzie "niezdefiniowana". –

+0

Tak. Myliłem się tutaj. W jakiś sposób pomyślałem, że każda właściwość w obiekcie jest innym obiektem, na przykład z nazwą właściwości, która jest łańcuchem. Oczywiście, że wszystko jest w porządku. Bardzo przepraszam. :) – Eugene

51

Można użyć each dla obiektów zbyt, a nie tylko dla tablic:

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

Po prostu niesamowite dzięki @gumbo :) –

8

Metoda ta będzie przechodzić przez właściwości obiektu i zapisać je do konsoli z tiret rosnącą:

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

Wystarczy przekazać obiekt chcesz iterację:

var response = $.ajax({ 
    url: myurl, 
    dataType: "json" 
}) 
.done(function(a){ 
    console.log("Returned values:"); 
    enumerate(a); 
}) 
.fail(function(){ console.log("request failed");}); 
+0

Używanie tego, gdy wartość jest zerowa, błąd z" Uncaught TypeError: Nie można odczytać właściwości "length 'of null" – JustinStolle

3

późno, ale można to zrobić za pomocą Object.keys podobnego

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>

Powiązane problemy