使用jQuery迭代JavaScript对象的属性


116

有没有一种jQuery方法可以对对象的成员执行迭代,例如:

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

我只是不喜欢for从我可爱的jQuery标记中伸出来!

Answers:


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


我还猜想,警报n并非完全正确。至少可能是n.name
尤金(Eugene)

2
@Eugene:我不明白你的意思。每个函数将数组或对象作为第一个参数,将函数作为第二个参数。对于数组中的每个元素/对象中的每个属性都调用此函数。每次调用该函数时,它都会获取作为参数传入的索引和值/名称和值。在我的示例中,参数“ n”是两个字符串“ John”和“ JS”。“名称”属性将为“未定义”。
蒂姆·布斯(TimBüthe)2011年

是的 我在这里错了。我以某种方式认为,对象中的每个属性都是另一个对象,例如,属性名称是一个字符串。当然,所有这些都是错误的。非常抱歉。:)
尤金(Eugene)

4
每个都有更多功能:thisnreturn false打破了每个循环……
andy 2012年

56

您也可以将each对象用于对象,而不仅仅是数组:

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

9

此方法将遍历对象属性,并以递增的缩进量将它们写入控制台:

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

只需将要迭代的对象传递给它即可:

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

当值为null时使用此错误,并出现“ Uncaught TypeError:无法读取null的属性'length'”
JustinStolle,2015年

3

较晚,但是可以通过使用Object.keys来完成,例如

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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.