Lặp lại thuộc tính của đối tượng JavaScript bằng jQuery


116

Có cách jQuery để thực hiện lặp qua các thành viên của đối tượng, chẳng hạn như trong:

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

Tôi chỉ không thích điều này fornhô ra giữa ký hiệu jQuery đáng yêu của tôi!

Câu trả lời:


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

mỗi


Ngoài ra, tôi đoán, cảnh báo đó nkhông hoàn toàn chính xác. Ít nhất nó có thể làn.name
Eugene

2
@Eugene: Tôi không hiểu ý bạn. Mỗi hàm nhận một mảng hoặc đối tượng làm đối số đầu tiên và một hàm làm đối số thứ hai. Hàm này nhận calld cho mọi phần tử trong mảng / mọi thuộc tính trong đối tượng. Mỗi khi hàm được gọi, nó sẽ nhận chỉ số và giá trị / tên và giá trị được chuyển vào dưới dạng đối số. Trong ví dụ của tôi, tham số "n" là hai chuỗi "John" và "JS". Thuộc tính "name" sẽ là "không xác định".
Tim Büthe

Vâng. Tôi đã sai ở đây. Bằng cách nào đó, tôi nghĩ rằng mọi thuộc tính trong đối tượng là một đối tượng khác với ví dụ tên thuộc tính là một chuỗi. Tất cả những điều đó đều sai. Rất xin lỗi. :)
Eugene

4
từng có nhiều tính năng hơn: thiscũng là n. return falsephá vỡ từng vòng lặp ...
andy

56

Bạn cũng có thể sử dụng eachcho các đối tượng và không chỉ cho mảng:

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

9

Phương thức này sẽ đi qua các thuộc tính đối tượng và ghi chúng vào bảng điều khiển với mức độ thụt lề tăng dần:

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

Chỉ cần chuyển nó đối tượng bạn muốn lặp qua:

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

Sử dụng điều này khi một giá trị lỗi null với "của router Lỗi Loại: Không thể đọc thuộc 'chiều dài' của null"
JustinStolle

3

Muộn, nhưng có thể được thực hiện bằng cách sử dụng Object.keys như,

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>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.