Уверен, в жизни любого js программиста рано или поздно возникает потребность в клонировании объекта. Основная проблема при этом — иммутабельность или неизменяемость. Или попросту говоря клонировать нужно так, чтобы нам вернулся новый объект, а не модифицированный оригинал.
Классический Object.assign
несмотря на простоту таким свойством не обладает. В общем-то традиционно для этого приходилось выкручиваться или сторонними библиотеками или копипастить с интернета монстроидальные функции или на худой конец говнокодить самому.
Сравнительно неплохим методом был старый добрый JSON.parse(JSON.stringify(x))
, но несмотря на лаконичность на этот лютый оверхед я не могу смотреть без боли.
Наконец спасибо ES6 у нас появился оператор spread (это то самое троеточие перед переменной), с помощью которого мы можем клонировать объекты малой кровью и предельно лаконично — примерно так
const clone = { ...original }
Можно даже сразу добавить/обновить свойство
const clone = { ...original, prop: newOne }
И это прекрасно!
Комментарии