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!

Jawaban:


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

setiap


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

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

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>

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.