Объединение объектов

Для объединения объектов можно воспользоваться оператором SPREAD. При этом копируются только собственные перечислимые свойства:

let obj1 = { a: 15, c: 6 };
let obj2 = Object.create(Object.prototype, {
   'a': {
      value: 10,
      writable: true,
      configurable: true,
      enumerable: true
   },
   'b': { value: 3, enumerable: false }
});
let obj3 = { ...obj1, ...obj2 }
console.log( obj3 );  // { a: 10, c: 6 }
// Копируются только собственные перечислимые свойства
console.log( Object.getOwnPropertyNames(obj3) );  // [ 'a', 'c' ]

Если свойства имеют одинаковое название, то значение из первого объекта будет заменено значением из второго объекта. Поэтому свойство a из примера получило значение 10. Эту особенность удобно использовать для объединения объекта с настройками по умолчанию и пользовательского объекта, внутри которого можно поменять некоторые значения по умолчанию:

let defaultObj = { focus: true, show: true };
let userObj = { show: false };
console.log( { ...defaultObj, ...userObj } );
// { focus: true, show: false }

Для объединения нескольких объектов с объектом из первого параметра можно воспользоваться статическим методом assign(<Объект 1>, ...<Объекты>) из класса Object. Метод возвращает ссылку на объект из первого параметра:

let obj1 = { a: 15, c: 6 };
let obj2 = Object.create(Object.prototype, {
   'a': {
      value: 10,
      writable: true,
      configurable: true,
      enumerable: true
   },
   'b': { value: 3, enumerable: false }
});
let obj3 = Object.assign(obj1, obj2);
console.log( obj3 );         // { a: 10, c: 6 }
// Изменяется объект из первого параметра
console.log( obj1 );         // { a: 10, c: 6 }
console.log( obj3 == obj1 ); // true
// Копируются только собственные перечислимые свойства
console.log( Object.getOwnPropertyNames(obj3) );  // [ 'a', 'c' ]

Если не нужно изменять существующий объект, то в первом параметре следует указать пустой объект:

let obj4 = Object.assign({}, obj1, obj2);
console.log( obj4 );         // { a: 10, c: 6 }
console.log( obj4 == obj1 ); // false

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов