Найти тему

Как скопировать массив или объект в JS?

Логотип JS
Логотип JS

Привет! Как скопировать массив или объект в javascript?

1) Копирование массива

const names = ['Oliver', 'Sophia', 'William', "Emma', 'Ethan'];

/* неправильно, copyNames содержит ссылку на names, при изменении элементов copyNames изменится names */

const copyNames = names;

/* правильно, copyNames независимая копия, под неё в памчти выделено собственное место и её можно менять не изменяя names */

const copyNames = names.slice();

/* так тоже можно скопировать массив */

const copyNames = [...names];

2) Копирование объектов

const user = {login: 'kruglov', password: '3456'};

/* Как и для массива, так неверно, мы получим ссылку на оригинальный объект */

const copyUser = user;

/* можно использовать spread-оператор */

const copyUser = {...user};

/* Для тех объектов, значения ключей которых - примитивы, можно использовать Object.assign() */

Object.assign(copyUser, user);

/* Можно в assign передать несколько объектов для копирования */

/* Для глубокого копирования объектов, ключи которых не примитивы, можно использовать JSON.parse */

const userCopy = JSON.parse(JSON.stringify(user));

/* Терзаем задачу дальше? - начиная с версии 17 NodeJS доступна функция structuredClone.

Еще можно использовать библиотеку lodash, функция cloneDeep */

/* в тексте поста переопределяются const переменные, поскольку они не будут вместе в одном коде, выбирайте подходящий */

Документация:

🔗 https://learn.javascript.ru/object-copy

🔗https://doka.guide/js/shallow-or-deep-clone/

#js #frontend