Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Поверхнева копія масиву». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Поверхнева копія (shallow copy)** - це новий масив, у якого є нова посилка (зміни в ньому не торкнуться оригіналу), але вкладені об'єкти копіюються за посиланням. **Ключове:** щоб зробити поверхневу копію масиву, використовуй `const copy = [...arr]`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Що таке "поверхнева копія" Поверхнева копія (shallow copy) - це **новий масив**, у якого: - є **нове посилання** (зміни в ньому не торкнуться оригіналу); - але вкладені об'єкти **копіюються за посиланням**. --- ## 1. Через оператор розповсюдження (spread `...`) - найсучасніший спосіб ```javascript const arr = [1, 2, 3]; const copy = [...arr]; console.log(copy); // [1, 2, 3] console.log(copy === arr); // false (новий масив) ``` Такий спосіб робить поверхневу копію - якщо елементи були об'єктами, вони все ще посилаються на ті самі дані: ```javascript const arr = [{ name: "Tim" }]; const copy = [...arr]; copy[0].name = "Alex"; console.log(arr[0].name); // "Alex" - бо об'єкт спільний ``` --- ## 2. Через `slice()` без аргументів ```javascript const arr = [1, 2, 3]; const copy = arr.slice(); console.log(copy); // [1, 2, 3] ``` - `slice()` без параметрів повертає **новий масив** - копію всього вихідного. - Це старий, але надійний спосіб. --- ## 3. Через `Array.from()` ```javascript const arr = [1, 2, 3]; const copy = Array.from(arr); console.log(copy); // [1, 2, 3] ``` Корисно, якщо ти хочеш не просто копію, а, наприклад, застосувати перетворення до кожного елемента: ```javascript const doubled = Array.from(arr, x => x * 2); // [2, 4, 6] ``` --- ## 4. Через `concat()` ```javascript const arr = [1, 2, 3]; const copy = [].concat(arr); console.log(copy); // [1, 2, 3] ``` Працює тому, що `concat()` повертає новий масив, а не змінює вихідний. --- ## Що не копіюється глибоко Усі перелічені методи **копіюють тільки верхній рівень**. Якщо в масиві є об'єкти або вкладені масиви, вони **залишаться за посиланням**. ```javascript const arr = [[1, 2], [3, 4]]; const copy = [...arr]; copy[0][0] = 99; console.log(arr[0][0]); // 99 - бо вкладений масив спільний ``` --- ## Коротко: | Спосіб | Код | Створює новий масив | Глибока копія? | |---|---|---|---| | Spread | `[...arr]` | Так | Ні | | `slice()` | `arr.slice()` | Так | Ні | | `Array.from()` | `Array.from(arr)` | Так | Ні | | `concat()` | `[].concat(arr)` | Так | Ні | --- > **Підсумок:** > Щоб зробити поверхневу копію масиву, використовуй: > > ```javascript > const copy = [...arr]; > ``` > > А якщо потрібне **глибоке копіювання** (разом із вкладеними об'єктами) - > можна використовувати `structuredClone(arr)` або `JSON.parse(JSON.stringify(arr))`.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.