2010-06-02 41 views
84

var user = {};Cách lặp lại đối tượng khóa/giá trị trong javascript

bây giờ tôi muốn tạo phương thức setUsers lấy đối tượng cặp khóa/giá trị và khởi tạo biến số user.

setUsers = function(data) { 

    // loop and init user 

} 

nơi dữ liệu giống như:

234: "john", 23421: "smith", .... 
+3

Câu hỏi cũ hơn có thể sao chép từ một phiên bản mới hơn như thế nào? –

Trả lời

144

Cẩn thận với tài sản thừa kế từ nguyên mẫu của đối tượng (trong đó có thể xảy ra nếu bạn đang kể bất kỳ thư viện nào trên trang của bạn, chẳng hạn như các phiên bản cũ hơn của Prototype). Bạn có thể kiểm tra điều này bằng cách sử dụng phương thức hasOwnProperty() của đối tượng. Đây thường là ý tưởng hay khi sử dụng các vòng:

var user = {}; 

function setUsers(data) { 
    for (var k in data) { 
     if (data.hasOwnProperty(k)) { 
      user[k] = data[k]; 
     } 
    } 
} 
+2

Có cách nào để thực hiện điều này mà không có vòng lặp for? Tôi lo lắng về tốc độ thông qua các cặp giá trị lớn (và tôi biết rằng Crockford không phải là một fan hâm mộ sử dụng JSLint, nhưng tôi không chắc chắn về lý do của anh ta). Có lý do gì để lo lắng về những điều này không? – streetlight

+2

@streetlight: Tùy thuộc vào môi trường. Nếu bạn có thể dựa vào việc có ECMAScript 5 (tất cả các trình duyệt hiện đại, cũng như Node.js), bạn có các tùy chọn như ['Object.keys()'] (https://developer.mozilla.org/en-US/ tài liệu/JavaScript/Tham chiếu/Global_Objects/Object/keys). Ví dụ: nếu bạn cần hỗ trợ IE <= 8, bạn bị kẹt với 'for ... in'. –

9

Something như thế này:

setUsers = function (data) { 
    for (k in data) { 
     user[k] = data[k]; 
    } 
} 
55
for (var key in data) { 
    alert("User " + data[key] + " is #" + key); // "User john is #234" 
} 
Các vấn đề liên quan