2012-03-23 19 views
8

GivenDodaj JavaScript Object do innego JavaScript Object

options = { 
underscored: true 
} 

products = { 
foo: bar 
} 

Chciałbym dostać

products = { 
underscored: true 
foo: bar 
} 

to możliwe, aby przesunąć obiekt do innego obiektu w JavaScript?

+0

http://stackoverflow.com/questions/1334660/combining-javascript-objects-into-one – bkconrad

Odpowiedz

20
<script> 
function mix(source, target) { 
    for(var key in source) { 
    if (source.hasOwnProperty(key)) { 
     target[key] = source[key]; 
    } 
    } 

} 

    mix(options, products); 
</script> 

UPDATE po 4 latach:

Istnieje wiele lepszych opcji teraz, z ES6 i ES7 coraz wspólny

ES6 - to będzie mutować objectToMergeTo

const combinedObject = Object.assign(objectToMergeTo, source1, source2) 

ES7 (piękno składni z operatorem rozprzestrzeniania) - ta wersja tworzy jednak nowe wystąpienie, którego nie można dodać do obiektu z operatorem rozprzestrzeniania.

const combined = { ...source1, ...source2 } 
+0

+1 dla 'hasOwnProperty()'! Jest to właściwy sposób na iterowanie po właściwościach obiektów. – jwueller

+0

Dzięki, że jesteś świetną pomocą! – lemon

+1

Peter, ta składnia ES7 wydaje się tworzyć trzeci obiekt zawierający dwa obiekty jako całość, a nie tylko ich właściwości. – TheEnvironmentalist

5

Można to zrobić:

for(var key in options) { 
    products[key] = options[key]; 
} 

które skutecznie łączą zmienne dwoma obiektami.

+0

Brakuje sprawdzenia 'hasOwnProperty' i spowoduje nieoczekiwane wyniki, w zależności od dwóch obiektów. Poza tym utworzy zmienną globalną "klucz", która jest zła. Zawsze używaj słowa kluczowego 'var'! – jwueller

+0

Naprawiono zmienną globalną, dziękuję za wskazanie tego. –

0
var options = { 
    underscored: true 
}; 
var products = { 
    foo: 'bar' 
}; 
products.underscored = options.underscored; 
alert(products.underscored+":"+products.foo); 

put cudzysłowie „bar”, aby rzeczywiście mieć wartość, średników i var na obiektach, ale masz rację.

EDYCJA: również warta odnotowania;

products.options = options; 
alert(products.options.underscored);//alerts true 
0

można użyć jquery.extend (produkty, opcje). jQuery.extend łączy dwa obiekty, ponad jazdami odpowiadającymi wartościami elementów w obiekcie docelowym i zwraca wynikowy obiekt. Aby uzyskać więcej informacji: http://api.jquery.com/jquery.extend/

Powiązane problemy