0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Слияние (merge) - операция над объектами, выполняющая их объединение. Она появляется там, где необходимо данные одного объекта перенести в другой объект.</p>
1
<p>Слияние (merge) - операция над объектами, выполняющая их объединение. Она появляется там, где необходимо данные одного объекта перенести в другой объект.</p>
2
<p>Слияние часто используется при работе с веб-формами. Например, когда пользователь меняет свои персональные данные в настройках аккаунта, измененные данные приходят в приложение в виде объекта. Данные из этого объекта нужно перенести в объект пользователя. Так происходит обновление пользователя:</p>
2
<p>Слияние часто используется при работе с веб-формами. Например, когда пользователь меняет свои персональные данные в настройках аккаунта, измененные данные приходят в приложение в виде объекта. Данные из этого объекта нужно перенести в объект пользователя. Так происходит обновление пользователя:</p>
3
<p>Решение в лоб - перенести каждое свойство отдельно:</p>
3
<p>Решение в лоб - перенести каждое свойство отдельно:</p>
4
<p>Прямой перенос хорошо работает, когда данных мало и их структура не меняется. Если же данных много или в разные моменты времени могут приходить разные данные, то это превращается в кучу одинакового кода:</p>
4
<p>Прямой перенос хорошо работает, когда данных мало и их структура не меняется. Если же данных много или в разные моменты времени могут приходить разные данные, то это превращается в кучу одинакового кода:</p>
5
<p>С помощью слияния (часто говорят "мержа") мы можем сократить все до одной строчки:</p>
5
<p>С помощью слияния (часто говорят "мержа") мы можем сократить все до одной строчки:</p>
6
<p>Метод<a>Object.assign()</a>берёт объект, переданный первым параметром, и переносит в него всё из объектов, переданных остальными параметрами. В нашей ситуации это один объект, переданный вторым параметром.</p>
6
<p>Метод<a>Object.assign()</a>берёт объект, переданный первым параметром, и переносит в него всё из объектов, переданных остальными параметрами. В нашей ситуации это один объект, переданный вторым параметром.</p>
7
<p>Слияние работает так. Если какое-то свойство было только в первом объекте, то оно остается тем, что и было. Если свойство присутствует во втором (и далее) объекте, то оно записывается в первый независимо от того, было оно там или нет. Поэтому, если свойство присутствовало и в первом объекте и во втором, то оно будет перезаписано значением из второго объекта:</p>
7
<p>Слияние работает так. Если какое-то свойство было только в первом объекте, то оно остается тем, что и было. Если свойство присутствует во втором (и далее) объекте, то оно записывается в первый независимо от того, было оно там или нет. Поэтому, если свойство присутствовало и в первом объекте и во втором, то оно будет перезаписано значением из второго объекта:</p>
8
<p>У метода Object.assign() есть одно ограничение: он выполняет только<em>поверхностное</em>слияние. Вложенные объекты не сравниваются, а просто заменяются:</p>
8
<p>У метода Object.assign() есть одно ограничение: он выполняет только<em>поверхностное</em>слияние. Вложенные объекты не сравниваются, а просто заменяются:</p>
9
<p>Как и любой другой мощный механизм, слияние нуждается в аккуратном использовании. В объектах бывают поля, которые не должны быть перезаписаны при слиянии, например, количество денег на счету у пользователя. Если не контролировать состав данных из второго объекта, то туда могут попасть свойства (случайно или злонамеренно), которые приведут к перезаписыванию важных свойств.</p>
9
<p>Как и любой другой мощный механизм, слияние нуждается в аккуратном использовании. В объектах бывают поля, которые не должны быть перезаписаны при слиянии, например, количество денег на счету у пользователя. Если не контролировать состав данных из второго объекта, то туда могут попасть свойства (случайно или злонамеренно), которые приведут к перезаписыванию важных свойств.</p>
10
<p><em>Если говорить про веб-формы, то технически всегда можно послать больше данных, чем описано в форме.</em></p>
10
<p><em>Если говорить про веб-формы, то технически всегда можно послать больше данных, чем описано в форме.</em></p>