HTML Diff
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>