2012-06-22 16 views
5

Powiel możliwe:
How can I merge properties of two JavaScript objects dynamically?Jak połączyć dwa obiekty w JavaScript?

Jeśli mam dwa obiekty JavaScript, który używam jako lista par klucz-wartość:

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

co jest najbardziej skuteczny sposób na połączenie ich w trzeci obiekt, który zawiera właściwości obu?

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

Nie przeszkadza mi, jeśli jeden lub oba a i b są modyfikowane w procesie.

+0

Jeśli właściwość zawiera inny obiekt lub tablicę, chcesz nowa kopia lub odniesienie do tej właściwości w nowym obiekcie? – jfriend00

+0

Jakie pytanie jest tym duplikatem? – Armand

+0

var a = {a: 1, c: 4}; \t var b = {b: 2, f: 9, d: 4}; \t \t var c = Combine (a, b); \t \t funkcja łączenia (array1, tablica2) { \t \t dla (kluczem tablica2) { \t \t \t array1 [klucz] = tablica2 [klucz]; \t \t} \t \t \t \t powrót array1 \t} – Tarun

Odpowiedz

5

Można to zrobić po prostu tak:

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

Jeśli chcesz zrobić głęboki łączenie (zakładając, że nie chcesz, aby skopiować funkcji i prototypy), można użyć tego:

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

Ale szczerze mówiąc nigdy nie widziałem, aby do głębokiego łączenia w javascript ...

+0

To działa tylko dla prymitywnych typów danych. Każdy typ obiektu będzie się odnosił tylko do niego. –

+1

Kopiowanie nawet nieprzeliczalnych właściwości? Nie biorąc pod uwagę zagnieżdżonych obiektów? Daj spokój! :-) –

+1

Głębokie klonowanie, jeśli różni się od klonowania ... –