2011-01-05 41 views
14

Tôi đang cố gắng lặp qua đối tượng JS được hiển thị bên dưới với đoạn mã sau, trong khi cần tìm nạp cả khóa chỉ mục cũng như đối tượng bên trong.jQuery: Lặp qua đối tượng đúng cách?

Làm cách nào để tôi thực hiện điều này, vì những điều sau đây không hoạt động?

Đối tượng:

({ prop_1:["1", "2"], 
prop_2:["3", "4"]}) 

Mã của tôi: sản lượng

$.each(myObject, function(key,valueObj){ 
    alert(key + "/" + valueObj.toSource()); 
}); 

dự kiến:

prop_1/(["1", "2"]) 

Trả lời

22

Đối tượng bên trong bạn đang lấy tốt, valueObj mảng, nó chỉ không có phương thức .toSource() (tại leas t không qua trình duyệt anyway), nếu bạn loại bỏ rằng bạn sẽ nhận được một cảnh báo:

$.each(myObject, function(key,valueObj){ 
    alert(key + "/" + valueObj); 
}); 

You can test it out here, không được ném ra rằng đầu ra chỉ là:

prop_1/1,2 
prop_2/3,4 

... các mặc định .toString() trên một Mảng là danh sách được phân tách bằng dấu phẩy, vì vậy đó là những gì bạn thấy với một số alert(). Ví dụ, nếu bạn thay vì làm alert(key + "/" + valueObj[0]);, bạn sẽ thấy:

prop_1/1 
prop_2/3 

... vì vậy bạn có thể thấy bạn có Array bạn muốn, you can test that here.

3

Bạn có thể sử dụng một định trong vòng lặp:

var myObject = ({ prop_1:["1", "2"], prop_2:["3", "4"]}) 
    for (var key in myObject) { 
     if (myObject.hasOwnProperty(key)) { 
      alert(key + "/" + myObject[key]); 
     } 
    } 
+1

này sẽ bao gồm các chức năng là tốt, vì vậy hãy chắc chắn để lọc chúng với 'typeof' nếu bạn không muốn họ. (JavaScript, Các bộ phận tốt, 3.7 Enumeration) – mdup

Các vấn đề liên quan