Я потратил некоторое время, чтобы собрать всю возможную информацию о клонировании объекта JavaScript. Я решил написать это, чтобы облегчить другим. Я не буду вдаваться в подробности в этом блоге, учитывая, что у вас есть базовые знания о том, как объекты.
Для объектов JavaScript может быть два типа клонов:
1) Поверхностный клон: объект клонируется, но ссылка на объект остается прежней, следовательно, изменение в clonedObject приводит к изменению в исходный объект тоже.
2) Глубокое клонирование: объект полностью клонируется. Даже вложенные объекты клонируются, и не остается ссылки на исходный объект, поэтому любые изменения в clonedObject не влияют на исходный объект.
Мелкий клон
- Использование библиотеки lodash -> const targetObj = lodash.clone(sourceObj)
- Object.assign(targetObj, sourceObj)
- Использование оператора распространения -› const targetObj = {…sourceObj}
Может также использоваться для объединения двух объектов (Shallow)
const mergedObj = {…sourceObj1, …sourceObj2}
Глубокий клон
- Использование библиотеки lodash -> const targetObj = lodash.deepClone(sourceObj)
- Итерация по свойству объекта и клонирование одного за другим в новый объект с использованием рекурсии для вложенного объекта. (Это также может быть вопрос интервью)
3. const targetObj = JSON.parse(JSON.stringify(sourceObj))
SourceObj в этом случае не должен содержать Date, regex, functions, map и т.д.
Самый надежный и рекомендуемый способ — использовать библиотеку Lodash, которая хорошо протестирована и охватывает большинство крайних случаев.
Отправьте письмо по адресу [email protected], если у вас есть какой-либо другой новый способ.