Câu hỏi jQuery: Lặp qua đối tượng đúng cách?


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 phải lấy cả khóa chỉ mục cũng như đối tượng bên trong.

Làm thế nào trên trái đất tôi nên làm điều này, như sau không hoạt động?

Đối tượng:

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

Ma cua toi:

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

Sản lượng dự kiến:

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

15
2018-01-05 11:31


gốc




Các câu trả lời:


Đối tượng bên trong bạn đang tìm kiếm tốt, valueObj   mảng, nó không có phương pháp .toSource() (ít nhất không phải là trình duyệt chéo), nếu bạn xóa bạn sẽ nhận được một cảnh báo:

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

Bạn có thể thử nghiệm ở đây, không được ném rằng đầu ra chỉ là:

prop_1/1,2
prop_2/3,4

... mặc định .toString() trên một mảng là một 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 alert(). Ví dụ: nếu bạn đã thay thế alert(key + "/" + valueObj[0] );, bạn sẽ thấy:

prop_1/1
prop_2/3

... để bạn có thể thấy bạn có Mảng bạn muốn, bạn có thể kiểm tra ở đây.


24
2018-01-05 11:36





Bạn có thể sử dụng vòng lặp for:

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

3
2018-01-05 11:41



Điều này cũng sẽ bao gồm các chức năng, do đó hãy chắc chắn lọc chúng typeof nếu bạn không muốn chúng. (JavaScript, Các bộ phận tốt, 3.7 Enumeration) - mdup