2012-06-22 20 views
5

Duplicar posible:
How can I merge properties of two JavaScript objects dynamically?¿Cómo se combinan dos objetos en Javascript?

Si tengo dos objetos de Javascript, que estoy usando como una lista de pares de valores clave:

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

lo que es el más forma eficiente de combinarlos en un tercer objeto que contiene las propiedades de ambos?

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

no me importa si uno o ambos de a y b se modifican en el proceso.

+0

Si una propiedad contiene otro objeto o una matriz, qué quiere una nueva copia o una referencia a esa propiedad en el nuevo objeto? – jfriend00

+0

¿De qué pregunta es este un duplicado? – 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 función Combinar (array1, array2) { \t \t para (clave en array2) { \t \t \t array1 [clave] = array2 [tecla]; \t \t} \t \t \t \t retorno array1 \t} – Tarun

Respuesta

5

Se puede hacer simplemente esto:

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

Si usted quiere hacer una fusión profunda (asumiendo que no desea copiar las funciones y prototipos), se puede utilizar esta:

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

Pero, francamente, nunca vi el uso de una profunda fusión en javascript ...

+0

Esto solo funcionará para tipos de datos primitivos. Cualquier tipo de objeto solo será referenciado. –

+1

¿Copia incluso propiedades no enumerables? ¿No se tienen en cuenta los objetos anidados? ¡Oh vamos! :-) –

+1

Clonación profunda si es diferente de la clonación ... –

Cuestiones relacionadas