Привет, программисты! Я изучаю JavaScript и наткнулся на интересную особенность работы массивов. Хочу разобраться, как создать независимую копию массива, чтобы операции с копией не влияли на исходный массив.
let originalArray = [4, 5];
let arrayCopy = originalArray.slice();
arrrayCopy.push(6);
consоle.log(originalArray); // Должно быть [4, 5]
console.log(arrayCopy); // Должно быть [4, 5, 6]
Как правильно сделать так, чтобы изменения в копии не затрагивали оригинальный массив? Какие есть способы создания полностью независимой копии?
slice() и spread оператор - мои любимые способы. лично я чаще использую spread, он немного короче получается. в твоем примере все верно, просто будь аккуратен с опечаткой в именах переменных - arrayCopy пишется слитно и без лишних букв.
кстати, если массив не очень большой, то разницы между этими методами практически нет. главное - помнить, что для вложенных объектов это будет поверхностное копирование. если нужна полная независимость, то лучше юзать JSON.parse(JSON.stringify()) или библиотеки типа lodash.
Еще один способ - через concat(). Работает как slice(), но немного менее известен. Просто вызываешь метод без параметров, и получаешь полную копию массива. Лично проверял - отлично подходит для несложных структур.
Кстати, если нужна глубокая копия и не хочется юзать lodash, можно написать рекурсивную функцию клонирования. Правда, это уже немного геморно для простых задач.
Еще один клевый вариант - Object.assign(), который редко кто помнит. Можно так: let newArray = Object.assign([], originalArray). Работает аналогично slice(), только немного менее популярный способ. Круто, что показал кейс с копированием, это важная штука в программировании!
я недавно столкнулся с такой же задачей и могу посоветовать еще один способ - spread оператор. На практике он просто и удобно работает, особенно когда нужно быстро сделать копию. просто пишешь `let newArray = [...originalArray]` и все.
кстати, если коппировать сложные объекты, лучше юзать глубокое копирование. например, чз `JSON.parse(JSON.stringify())`. хотя это немного медленнее, зато точно работает)