2021-03-25 10:30:00
JavaScript глубокое копирование объектов
Назначение исходного объекта новой переменной создает поверхностную копию, что означает, что оригинал и копия связаны, и любое изменение повлияет на них обоих, как в следующем примере:
const car1 = {color : "red" , wheels : 4};
let car2 = car1;
car2.color = "black";
console.log(car1.color);//black
console.log(car2.color);//black
Когда вы создаете глубокую копию, вы создаете идентичную копию исходного элемента с его свойствами.
Оригинал и копия не связаны, что означает, если вы изменили свойства оригинала, это не повлияет на скопированный элемент и не изменит его.
Итак, как же создать глубокую копию для объектов?
Оператор Spread
Это также называется деструктуризацией, которая помогает распространить все свойства или элементы из массива или объекта в новый элемент.
const car1 = {color : "red" , wheels : 4};
let car2 = {...car1};
car2.color = "black";
console.log(car1.color);//red
console.log(car2.color);//black
Object.assign
Другой способ глубокого копирования объекта с помощью Object.assign (), который создает совершенно новую и отдельную копию.
const car1 = {color : "red" , wheels : 4};
let car2 = Object.assign({}, car1);
car2.color = "black";
console.log(car1.color);//red
console.log(car2.color);//black
JSON.parse() и JSON.stringify()
JSON.stringify() преобразует переданный элемент в строку с форматом JSON. Затем JSON.parse () преобразует его обратно в объект JavaScript, это позволяет выполнять глубокое клонирование и для вложенных объектов, чего не происходит с оператором Object.assign или Spread.
const car1 = {color : "red" , wheels : 4};
let car2 = JSON.parse(JSON.stringify(car1));
car2.color = "black";
console.log(car1.color);//red
console.log(car2.color);//black
3.9K views07:30