Задать вопрос
partyzanx
@partyzanx

Возможно ли скопировать объект на всю глубину с Object.assign?

Я так понял, что такой код копирует только первый уровень вложенности.
Как скопировать все уровни вложенности?

var time = {
year: 2345,
month: 11,
day: 10,
hour: 11,
minute: 12,
second: 13,
microsecond: 123456,
something: { name: "Donald"}
};
  
  var clone = Object.assign({},time);
  clone.year = 1990;
$('.parent').append(time.year); // 2345
$('.parent').append(clone.year); // 1990
clone.something.name = "Yury";
$('.parent').append(time.something.name); // Yury
$('.parent').append(clone.something.name);  // Yury WTF????


  • Вопрос задан
  • 156 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@PavelPikat
Deepcopy с Object.assign сделать невозможно. Object.assign создает shallow copy. Вложенные объекты являются ссылками на оригинальный объект.

Чтобы сделать deepcopy, нужно использовать другие инструменты.
Например, JSON.parse(JSON.stringify(object)) (с потерей данных)
или использовать стороннюю библиотеку в которой это реализовано, типа jQuery/lodash
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы