2012-01-31 2 views
4

В javascript я хотел бы объединить два объекта в один. Я получилОбъедините два объекта в один

{ 
    test: false, 
    test2: false 
} 

и

{ 
    test2: true 
} 

Я пытался использовать $.extend, $.merge, но все это я получаю как выход

{ 
    test2: true 
} 

Как получить такой вывод

{ 
    test: false, 
    test2: true 
} 

EDI T: На самом деле у меня есть вложенные объекты. Что мне нужно, чтобы объединить a и b следующим образом:

var a = { test: false, test2: { test3: false, test4: false } }; 
var b = { test2: { test4: true } }; 
// desired combined result: 
{ test: false, test2: { test3: false, test4: true } } 

но фактический результат я получаю удаляет test3 от вложенного test2 объекта.

+3

$ .extend() должен работать. покажите, какой код вы пробовали. – yoavmatchulsky

+0

Какое правило для конечного объекта получить test2: true, а не test2: false? –

+0

мне нужен вар а = { тест: ложь, test2: { \t \t test3: ложь, \t \t test4: ложные \t} }; вар Ь = { test2: { \t \t test4: истинная \t} }; и get {test: false, test2: {test3: false, test4: true}}, но я удаляю test3 после – debianek

ответ

9
var a = { 
    test: false, 
    test2: false 
}; 

var b = { 
    test2: true 
}; 

var c = $.extend(a, b); 

Это перезапишет все свойства на объекте a с результатом:

{ 
    test: false, 
    test2: true 
} 

Если вы хотите новый, свежий объект вызова .extend так:

var c = $.extend({}, a, b); 

Это будет делать такая же работа, но она оставляет объект a нетронутым и создает новый объект. См http://api.jquery.com/jQuery.extend/


обновления

В вашем комментарии вы обновили структуры объектов. Ну, что вам нужно, так называется «глубокий клон». Это просто еще один параметр для $.extend() вызова, например, так:

var c = $.extend(true, a, b); // a gets overwritten 
var c = $.extend(true, {}, a, b); // new object is created 
+0

Привет, да работает, я поставил неправильный пример, что мне нужно вар а = { тест: ложь, test2: { \t \t test3 ложь , \t \t test4: false \t} }; вар Ь = { test2: { \t \t test4: истинная \t} }; и получить {test: false, test2: {test3: false, test4: true}}, но я удаляю test3 после – debianek

+0

@debianek: я обновил ответ. – jAndy

+0

Хорошо, спасибо, он отлично работает! – debianek

0

Вы можете использовать Object.assign скопировать значения всех перечислимых собственных свойств из одного или нескольких объектов источника к целевому объекту.

Я использовал его в этом многоразовом object-merge component, который объединяет несколько объектов в один, не изменяя их.

Пример:

const o1 = { a: 1 }; 
const o2 = { b: 2 }; 
const o3 = { c: 3 }; 

const obj = merge(o1, o2, o3); 
console.log(obj); // { a: 1, b: 2, c: 3 } 
console.log(o1); // { a: 1 } does not mutate objects