2012-06-22 33 views
5

thể trùng lặp:
How can I merge properties of two JavaScript objects dynamically?Làm cách nào để kết hợp hai đối tượng trong Javascript?

Nếu tôi có hai đối tượng javascript mà tôi đang sử dụng như một danh sách các cặp khóa-giá trị:

var a = {a:1}; 
var b = {b:2}; 

nhất là gì cách hiệu quả để kết hợp chúng thành một đối tượng thứ ba có chứa các thuộc tính của cả hai?

var c = {a:1, b:2}; 

Tôi không quan tâm nếu một trong hai hoặc cả hai ab được sửa đổi trong quá trình này.

+0

Nếu một tài sản chứa một đối tượng hoặc một mảng, bạn có muốn bản sao mới hoặc tham chiếu đến thuộc tính đó trong đối tượng mới? – jfriend00

+0

Câu hỏi này là gì trùng lặp? – Armand

+0

var a = {a: 1, c: 4}; \t var b = {b: 2, f: 9, d: 4}; \t \t var c = kết hợp (a, b); \t \t chức năng kết hợp (array1, array2) { \t \t cho (quan trọng trong array2) { \t \t \t array1 [key] = array2 [key]; \t \t} \t \t \t \t trở array1 \t} – Tarun

Trả lời

5

Bạn có thể làm đơn giản này:

var c = {}; 
    for (var key in a) { 
     c[key] = a[key]; 
    } 
    for (var key in b) { 
     c[key] = b[key]; 
    } 

Nếu bạn muốn làm một việc sáp nhập sâu (giả sử bạn không muốn sao chép các chức năng và nguyên mẫu), bạn có thể sử dụng này:

function goclone(source) { 
     if (Object.prototype.toString.call(source)==='[object Array]') { 
      var clone = []; 
      for (var i=0; i<source.length; i++) { 
       if (source[i]) clone[i] = goclone(source[i]); 
      } 
      return clone; 
     } else if (typeof(source)=="object") { 
      var clone = {}; 
      for (var prop in source) { 
       if (source[prop]) { 
        var firstChar = prop.charAt(0); 
        clone[prop] = goclone(source[prop]); 
       } 
      } 
      return clone; 
     } else { 
      return source; 
     } 
    } 


    var c = {}; 
    for (var key in a) { 
     c[key] = goclone(a[key]); 
    } 
    for (var key in b) { 
     c[key] = goclone(b[key]); 
    } 

Nhưng thẳng thắn mà nói tôi chưa bao giờ thấy việc sử dụng một kết hợp sâu trong javascript ...

+0

Điều này sẽ chỉ hoạt động với các kiểu dữ liệu nguyên thủy. Mọi loại đối tượng sẽ chỉ được tham chiếu. –

+1

Sao chép ngay cả các thuộc tính không đếm được? Không tính đến các đối tượng lồng nhau? Oh, thôi nào! :-) –

+1

Nhân bản sâu nếu khác với nhân bản ... –

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