Динамическое слияние свойств двух объектов в JavaScript

Введение В JavaScript объект определяется как набор пар ключ-значение. Объект также является непримитивным типом данных. Часто вам нужно объединить объекты в один, который содержит все индивидуальные свойства составляющих его частей. Эта операция называется слиянием. Два наиболее распространенных способа сделать это: * Использование оператора распространения (...) * Использование метода Object.assign () В этом руководстве мы рассмотрим, как динамически объединить два объекта в JavaS.

Вступление

В JavaScript объект определяется как набор пар ключ-значение. Объект также является непримитивным типом данных.

Часто вам нужно объединить объекты в один, который содержит все индивидуальные свойства составляющих его частей. Эта операция называется слиянием . Два наиболее распространенных способа сделать это:

  • Использование оператора распространения ( ... )
  • Использование Object.assign()

В этом руководстве мы рассмотрим, как динамически объединить два объекта в JavaScript .

После этого мы рассмотрим разницу между неглубоким и глубоким слиянием , потому что это важно для полного понимания слияния объектов.

Объединение объектов JavaScript с помощью оператора распространения

Мы можем объединить разные объекты в один, используя оператор распространения ( ... ) . Это также наиболее распространенный метод объединения двух или более объектов.

Это неизменный подход к слиянию двух объектов, т. Е. Два начальных объекта, которые используются для создания объединенного, никоим образом не изменяются из-за побочных эффектов. В конце концов, у вас есть новый объект, созданный из двух, пока они еще нетронутые.

Создадим два объекта и объединим их:

 const person = { 
 name: "John Doe", 
 age: 24 
 } 
 const job = { 
 title: "Full stack developer", 
 location: "Remote" 
 } 
 
 const employee = {...person, ...job}; 
 
 console.log(employee); 

Это приводит к:

 { 
 name: "John Doe", 
 age: 24, 
 title: "Full stack developer", 
 location: "Remote" 
 } 

Примечание. Если у этих двух объектов есть общие свойства, например, у каждого из них есть location , свойства второго объекта ( job ) перезапишут свойства первого объекта ( person ):

 const person = { 
 name: "John Doe", 
 location: "Remote" 
 } 
 const job = { 
 title: "Full stack developer", 
 location: "Office" 
 } 
 const employee = {...person, ...job} 
 
 console.log(employee); 

Это приводит к:

 { 
 name: 'John Doe', 
 location: 'Office', 
 title: 'Full stack developer' 
 } 

Если объединяется более двух объектов, крайний правый объект имеет приоритет над объектами слева.

Объединить объекты JavaScript с помощью Object.assign ()

Другой распространенный способ объединения двух или более объектов - использование встроенного метода Object.assign()

 Object.assign(target, source1, source2, ...); 

Этот метод копирует все свойства из одного или нескольких исходных объектов в целевой объект. Как и в случае с оператором распространения, при перезаписи используется самое правое значение:

 const person = { 
 name: "John Doe", 
 age: 24, 
 location: "USA" 
 } 
 const job = { 
 title: "Full stack developer", 
 location: "Remote" 
 } 
 
 const employee = Object.assign(person, job); 
 
 console.log(employee); 

Выполнение приведенного выше кода приведет к следующему выводу:

 { 
 name: "John Doe", 
 age: 24, 
 location: "Remote", 
 title: "Full stack developer" 
 } 

Опять же, имейте в виду, что объект, на который ссылается employee является полностью новым объектом и никоим образом не связан с объектами, на которые ссылается person или job .

Мелкое слияние против глубокого слияния

В случае неглубокого слияния , если одно из свойств исходного объекта является другим объектом, целевой объект содержит ссылку на тот же объект, который существует в исходном объекте. В этом случае новый объект не создается.

Давайте настроим предыдущий person и сделаем location объектом для себя:

 const person = { 
 name: "John Doe", 
 location: { 
 city: "London", 
 country: "England" 
 } 
 } 
 const job = { 
 title: "Full stack developer" 
 } 
 
 const employee = {...person, ...job}; 
 
 console.log(employee.location === person.location); 

Это приводит к:

 true 

Мы видим, что ссылка на объект location person и в employee одинакова. Фактически, и оператор распространения ( ... ), и Object.assign() выполняют неглубокое слияние.

В JavaScript нет встроенной поддержки глубокого слияния. Однако есть сторонние модули и библиотеки, которые его поддерживают, например _.merge Lodash{.udemy-link} .

Заключение

В этом руководстве мы рассмотрели, как объединить два объекта в JavaScript . Мы изучили оператор распространения ( ... ) и метод Object.assign() , которые выполняют неглубокое слияние двух или более объектов в новый, не затрагивая составные части.

comments powered by Disqus