slice() возвращает часть массива в виде нового массива.
Это один из самых удобных методов, когда нужно взять кусок массива и не менять исходный.
Синтаксис
array.slice()
array.slice(start)
array.slice(start, end)
start - индекс, с которого начинается копирование.
end - индекс, до которого копируются элементы, но сам end в результат не входит.
Что делает slice()
Метод создаёт новый массив и копирует в него нужные элементы.
const numbers = [10, 20, 30, 40];
const result = numbers.slice(1, 3);
console.log(result); // [20, 30]
console.log(numbers); // [10, 20, 30, 40]
Исходный массив при этом не меняется.
start и end
Первый аргумент задаёт начало, второй - конец диапазона.
const fruits = ["apple", "banana", "orange", "kiwi"];
console.log(fruits.slice(1, 3)); // ["banana", "orange"]
Здесь копирование начинается с индекса 1 и останавливается перед индексом 3.
Если передать только start
Если указать только start, метод возьмёт элементы от этой позиции до конца массива.
const numbers = [1, 2, 3, 4];
console.log(numbers.slice(2)); // [3, 4]
Если не передавать аргументы
Без аргументов slice() возвращает копию массива.
const numbers = [1, 2, 3];
const copy = numbers.slice();
console.log(copy); // [1, 2, 3]
console.log(copy === numbers); // false
Это простой способ скопировать массив.
Отрицательные индексы
slice() поддерживает отрицательные индексы.
В этом случае отсчёт идёт с конца массива.
const numbers = [1, 2, 3, 4, 5];
console.log(numbers.slice(-2)); // [4, 5]
console.log(numbers.slice(1, -1)); // [2, 3, 4]
Это одна из причин, почему slice() часто удобнее других методов.
slice() не меняет исходный массив
После вызова slice() исходный массив остаётся прежним:
const items = ["a", "b", "c"];
const result = items.slice(0, 2);
console.log(items); // ["a", "b", "c"]
console.log(result); // ["a", "b"]
Если нужен именно изменённый массив, обычно смотрят в сторону splice().
slice() и splice()
Эти методы часто путают, но у них разная задача.
const numbers = [1, 2, 3, 4];
const result = numbers.slice(1, 3);
console.log(result); // [2, 3]
console.log(numbers); // [1, 2, 3, 4]
slice() возвращает новый массив и не меняет исходный.
splice() меняет исходный массив и может удалять, вставлять или заменять элементы.
Поверхностная копия
slice() создаёт не глубокую, а поверхностную копию.
Это значит, что вложенные объекты внутри массива не копируются полностью.
const users = [{ name: "Anna" }];
const copy = users.slice();
copy[0].name = "Ivan";
console.log(users[0].name); // "Ivan"
Сам массив новый, но вложенный объект внутри него остался тем же самым.
Когда это полезно
slice() удобно использовать, когда:
- нужно получить часть массива
- нужно скопировать массив
- важно не менять исходные данные
- нужно взять несколько последних элементов через отрицательный индекс
Частые ошибки
Думать, что end включается в результат
const numbers = [1, 2, 3, 4];
console.log(numbers.slice(1, 3)); // [2, 3]
Элемент с индексом 3 сюда уже не попадёт.
Путать slice() и splice()
const numbers = [1, 2, 3, 4];
numbers.slice(1, 3);
Этот код не меняет массив. Если ожидалось удаление элементов, нужен не slice().
Считать, что slice() делает глубокую копию
const list = [{ value: 1 }];
const copy = list.slice();
Массив копируется, но вложенные объекты внутри остаются общими.
Быстрая памятка
slice()возвращает часть массива в новом массиве- исходный массив не меняется
endне включается в результат- метод поддерживает отрицательные индексы
- без аргументов
slice()создаёт копию массива
Коротко
slice() - это удобный способ взять часть массива или сделать его копию без изменения исходных данных. Главное, что стоит запомнить: метод возвращает новый массив, а не меняет старый.