Автор оригинала: Abhilash Kakumanu.
Вступление
В JavaScript объект определяется как коллекция Ключевое значение Пары. Объект также является не примитивным типом данных.
Вы будете часто нужно объединить объекты в один, который содержит все отдельные свойства его составных частей. Эта операция называется Слияние Отказ Два наиболее распространенных способа сделать это:
- Использование оператора распространения (
...) - Используя
Объект.assign ()метод
В этом руководстве мы посмотрим на Как объединить два объекта динамически в JavaScript Отказ
После этого мы осмотрим разницу между Неглубокое слияние и Deep Merge Потому что это важно для полного понимания объединения объекта.
Слияние объектов 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"
}
Примечание: Если между этими двумя объектами есть общие свойства, такие как они оба имеют Расположение , свойства от второго объекта ( задания ) перезапишет свойства первого объекта ( 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 ()
Еще один распространенный способ объединения двух или более объектов – использовать встроенный Объект.assign () Метод:
Object.assign(target, source1, source2, ...);
Этот метод копирует все свойства от одного или нескольких Источник объекты в цель объект. Как и с оператором распространения, при перезаписи правильное значение используется:
const person = {
name: "John Doe",
age: 24,
location: "U.S.A"
}
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"
}
Опять же, имейте в виду, что объект, на который ссылается сотрудник это совершенно новый объект, и никоим образом не связан с объектами, на которые ссылаются человек или работа Отказ
Мелко слияние против глубокого слива
В случае Неглубокое слияние Если один из свойств на исходном объекте является еще один объект, целевой объект содержит ссылку на тот же объект, который существует в исходном объекте. Новый объект не создан в этом случае.
Давайте настроим предыдущий человек объект и сделать Расположение объект для себя:
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
Мы видим, что ссылка на Расположение объект в обоих человек и сотрудник Объект одинаково. На самом деле, оба оператора распространения ( ... ) и Объект.assign () выполнить неглубокое слияние.
У JavaScript нет Deep Merge Поддержка из коробки. Тем не менее, есть сторонние модули и библиотеки, которые поддерживают его, как Лодаш Отказ
Заключение
В этом руководстве мы посмотрели на Как объединить два объекта в JavaScript Отказ Мы исследовали оператор по распространению ( ... ) и Объект.assign () Метод, который оба выполняют Неглубокое слияние из двух или более объектов в новый, не затрагивая составляющие детали.