JQuery kullanarak bir JavaScript nesnesinin özelliklerini yineleme


116

Bir nesnenin üyeleri üzerinde yineleme gerçekleştirmenin aşağıdaki gibi bir jQuery yolu var mı:

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

Bunun forgüzel jQuery notasyonumdan dışarı çıkmasını sevmiyorum !

Yanıtlar:


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

her biri


Ayrıca sanırım, bu uyarı ntamamen doğru değil. En azından olabilirn.name
Eugene

2
@ Eugene: Ne demek istediğini anlamadım. Her işlev, ilk bağımsız değişken olarak bir dizi veya nesneyi ve ikinci olarak bir işlevi alır. Bu işlev, dizideki her öğe / nesnedeki her özellik için çağrı alır. İşlev her çağrıldığında, dizini ve değeri / adı ve bağımsız değişken olarak iletilen değeri alır. Örneğimde "n" parametresi "John" ve "JS" dizisidir. "Ad" özelliği "tanımsız" olacaktır.
Tim Büthe

Evet. Burada yanılmışım. Her nasılsa, nesnedeki her özelliğin, örneğin özellik adı olan bir dize olan başka bir nesne olduğunu düşündüm. Tabii ki bunların hepsi yanlış. Çok üzgünüm. :)
Eugene

4
her birinin çok daha fazla özelliği vardır: thisaynı zamanda n. return falseher döngüyü kırar ...
andy

56

Yalnızca eachdiziler için değil nesneler için de kullanabilirsiniz :

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

9

Bu yöntem, nesne özelliklerini inceleyecek ve bunları artan girintiyle konsola yazacaktır:

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

Yinelemek istediğiniz nesneyi iletin:

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

Bir değer "Yakalanmamış TypeError: Boş değerin 'uzunluğu' özelliği okunamıyor" ile boş hata olduğunda bunu kullanma
JustinStolle

3

Geç, ancak aşağıdaki gibi Object.keys kullanılarak yapılabilir ,

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.