Стандартный метод ECMAScript 2018
Вы бы использовали объект распространения :
let merged = {...obj1, ...obj2};
/** There's no limit to the number of objects you can merge.
* Later properties overwrite earlier properties with the same name. */
const allRules = {...obj1, ...obj2, ...obj3};
ECMAScript 2015 (ES6) Стандартный метод
/* For the case in question, you would do: */
Object.assign(obj1, obj2);
/** There's no limit to the number of objects you can merge.
* All objects get merged into the first object.
* Only the object in the first argument is mutated and returned.
* Later properties overwrite earlier properties with the same name. */
const allRules = Object.assign({}, obj1, obj2, obj3, etc);
(см. Справочник MDN JavaScript )
Метод для ES5 и ранее
for (var attrname in obj2) { obj1[attrname] = obj2[attrname]; }
Обратите внимание, что это просто добавит все атрибуты obj2
к obj1
, которые могут не соответствовать вашим требованиям, если вы все еще хотите использовать неизмененный obj1
.
Если вы используете фреймворк, охватывающий все ваши прототипы, вам придется потрудиться с проверками типа hasOwnProperty
, но этот код будет работать в 99% случаев.
Пример функции:
/**
* Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1
* @param obj1
* @param obj2
* @returns obj3 a new object based on obj1 and obj2
*/
function merge_options(obj1,obj2){
var obj3 = {};
for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
return obj3;
}