Часто возникает ситуация, когда нужно копировать массив в JavaScript. На первый взгляд, кажется, что это достаточно просто сделать, присваивая один массив другому. Однако это не совсем так.
Рассмотрим следующий пример:
let fruits1 = ['apple', 'banana', 'cherry']; let fruits2 = fruits1; fruits2.push('date'); console.log(fruits1); // Выведет: ['apple', 'banana', 'cherry', 'date']
В этом случае оказывается, что оба массива — fruits1
и fruits2
— указывают на один и тот же массив. Изменение в одном массиве отражается и в другом. Это происходит потому, что в JavaScript массивы являются ссылочными типами данных. При присваивании одного массива другому, оба массива ссылаются на одно и то же место в памяти, где хранятся данные.
Так что, если нужно копировать массив так, чтобы получить два независимых массива, которые можно изменять отдельно, нужно использовать другой подход.
Один из способов сделать это — использовать метод slice
без аргументов:
let fruits1 = ['apple', 'banana', 'cherry']; let fruits2 = fruits1.slice(); fruits2.push('date'); console.log(fruits1); // Выведет: ['apple', 'banana', 'cherry'] console.log(fruits2); // Выведет: ['apple', 'banana', 'cherry', 'date']
В этом случае fruits2
становится копией fruits1
, и их можно изменять независимо друг от друга.
Еще один способ — использовать оператор расширения (spread operator) ...
:
let fruits1 = ['apple', 'banana', 'cherry']; let fruits2 = [...fruits1]; fruits2.push('date'); console.log(fruits1); // Выведет: ['apple', 'banana', 'cherry'] console.log(fruits2); // Выведет: ['apple', 'banana', 'cherry', 'date']
Этот оператор создает новый массив, копируя в него все элементы исходного массива.
Добавить комментарий