Iterasi properti objek JavaScript menggunakan jQuery

116

Apakah ada cara jQuery untuk melakukan iterasi pada anggota objek, seperti di:

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

Saya hanya tidak suka ini formencuat dari antara notasi jQuery saya yang indah!

tags2k
sumber

Jawaban:

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

setiap

Tim Büthe
sumber
Juga saya rasa, peringatan nitu tidak sepenuhnya benar. Setidaknya bisa jadin.name
Eugene
2
@ Eugene: Saya tidak mengerti maksud Anda. Setiap fungsi mengambil larik atau objek sebagai argumen pertama dan fungsi sebagai yang kedua. Fungsi-fungsi ini dipanggil untuk setiap elemen dalam larik / setiap properti dalam objek. Setiap kali fungsi dipanggil, ia mendapatkan indeks dan nilai / nama dan nilai yang diteruskan sebagai argumen. Dalam contoh saya, parameter "n" adalah dua string "John" dan "JS". Properti "nama" akan menjadi "tidak ditentukan".
Tim Büthe
Ya. Saya salah di sini. Entah bagaimana saya berpikir, bahwa setiap properti dalam objek adalah objek lain dengan misalnya nama properti yang berupa string. Tentu saja semua itu salah. Sangat menyesal. :)
Eugene
4
masing-masing memiliki lebih banyak fitur: thisjuga n. return falsememutus setiap lingkaran ...
andy
56

Anda juga dapat menggunakan eachuntuk objek dan tidak hanya untuk array:

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

Metode ini akan berjalan melalui properti objek dan menuliskannya ke konsol dengan menambah indentasi:

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

Cukup berikan objek yang ingin Anda iterasi:

var response = $.ajax({
    url: myurl,
    dataType: "json"
})
.done(function(a){
   console.log("Returned values:");
   enumerate(a);
})
.fail(function(){ console.log("request failed");});
jonathanbruder
sumber
Menggunakan ini ketika nilai adalah kesalahan nol dengan "Uncaught TypeError: Tidak dapat membaca properti 'panjang' dari null"
JustinStolle
3

Terlambat, tetapi bisa dilakukan dengan menggunakan Object.keys seperti,

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
sumber