Spec-Zone.ru › JavaScript

Array.prototype.slice()

Базовая линия Широко доступна

Эта функция хорошо зарекомендовала себя и работает на множестве устройств и версий браузеров. Она доступна во всех браузерах с июля 2015 года.

Метод slice() экземпляров Array возвращает поверхностную копию части массива в новый объект массива, выбранный от start до end (end не включительно), где start и end представляют собой индекс элементов в этом массиве. Исходный массив не будет изменен.

Попробуйте

const animals = ["ant", "bison", "camel", "duck", "elephant"];

console.log(animals.slice(2));
// Expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// Expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// Expected output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2));
// Expected output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1));
// Expected output: Array ["camel", "duck"]

console.log(animals.slice());
// Expected output: Array ["ant", "bison", "camel", "duck", "elephant"]

Синтаксис

slice()
slice(start)
slice(start, end)

Параметры

start Необязательный
Индекс, начинающийся с нуля, с которого начинается извлечение, преобразованный в целое число.
  • Отрицательный индекс отсчитывается с конца массива — если -array.length <= start < 0, используется start + array.length.
  • Если start < -array.length или start опущены, используется 0.
  • Если start >= array.length, возвращается пустой массив.
end Необязательный
Индекс, начинающийся с нуля, на котором заканчивается извлечение, преобразованный в целое число. slice() извлекает до, но не включая end.
  • Отрицательный индекс отсчитывается с конца массива — если -array.length <= end < 0, используется end + array.length.
  • Если end < -array.length, используется 0.
  • Если end >= array.length или end опущены или undefined, используется array.length, что приводит к извлечению всех элементов до конца.
  • Если end подразумевает позицию до или на позиции, которую подразумевает start, возвращается пустой массив.

Возвращаемое значение

Новый массив, содержащий извлеченные элементы.

Описание

Метод slice() является методом копирования. Он не изменяет this, а возвращает поверхностную копию, содержащую некоторые из тех же элементов, что и в исходном массиве.

Метод slice() сохраняет пустые слоты. Если срезанная часть является разреженной, возвращаемый массив также будет разреженным.

Метод slice() является общим. Он ожидает только, что значение this будет иметь свойство length и целочисленные свойства.

Примеры

Возврат части существующего массива

const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
const citrus = fruits.slice(1, 3);

// fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
// citrus contains ['Orange','Lemon']

В этом примере slice(1, 3) извлекает элементы от индекса 1 до, но не включая, индекса 3, в результате чего создается новый массив ['Orange', 'Lemon'].

Опущение параметра end

const fruits = ["Apple", "Banana", "Orange", "Mango", "Pineapple"];

const tropical = fruits.slice(2);
console.log(tropical); // ['Orange', 'Mango', 'Pineapple']

В этом примере slice(2) извлекает элементы от индекса 2 до конца массива.

Использование отрицательных индексов

const fruits = ["Apple", "Banana", "Orange", "Mango", "Pineapple"];

const lastTwo = fruits.slice(-2);
console.log(lastTwo); // ['Mango', 'Pineapple']

В этом примере slice(-2) извлекает последние два элемента массива. При использовании отрицательного индекса с методом slice отрицательные индексы отсчитываются с конца массива, начиная с -1 для последнего элемента, -2 для предпоследнего элемента и так далее. Отрицательный индекс -2 сам по себе включен, так как он является начальной точкой извлечения.

|     |     |     |     |     |
|  S  |  L  |  I  |  C  |  E  |
|     |     |     |     |     |
  -5    -4    -3    -2    -1

<--- read from reverse

Использование положительного начального индекса и отрицательного конечного индекса

const fruits = ["Apple", "Banana", "Orange", "Mango", "Pineapple"];

// Using positive start index and negative end index
const sliceExample = fruits.slice(1, -1);
console.log(sliceExample); // ['Banana', 'Orange', 'Mango']

В этом примере slice(1, -1) начинает извлечение с индекса 1 и идет до, но не включая, элемента по индексу -1 (который является последним элементом). Это приводит к созданию нового массива с ['Banana', 'Orange', 'Mango']. Метод slice всегда исключает элемент по указанному конечному индексу, независимо от того, положительный он или отрицательный.

read from start --->

   0     1     2     3     4
|     |     |     |     |     |
|  S  |  L  |  I  |  C  |  E  |
|     |     |     |     |     |
  -5    -4    -3    -2    -1

<--- read from reverse

Использование slice с массивами объектов

В следующем примере slice создает новый массив newCar из myCar. Оба содержат ссылку на объект myHonda. Когда цвет myHonda изменяется на фиолетовый, оба массива отражают это изменение.

// Using slice, create newCar from myCar.
const myHonda = {
  color: "red",
  wheels: 4,
  engine: { cylinders: 4, size: 2.2 },
};
const myCar = [myHonda, 2, "cherry condition", "purchased 1997"];
const newCar = myCar.slice(0, 2);

console.log("myCar =", myCar);
console.log("newCar =", newCar);
console.log("myCar[0].color =", myCar[0].color);
console.log("newCar[0].color =", newCar[0].color);

// Change the color of myHonda.
myHonda.color = "purple";
console.log("The new color of my Honda is", myHonda.color);

console.log("myCar[0].color =", myCar[0].color);
console.log("newCar[0].color =", newCar[0].color);

Этот скрипт выводит:

myCar = [
  { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } },
  2,
  'cherry condition',
  'purchased 1997'
]
newCar = [ { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } }, 2 ]
myCar[0].color = red
newCar[0].color = red
The new color of my Honda is purple
myCar[0].color = purple
newCar[0].color = purple

Вызов slice() для не-массивовых объектов

Метод slice() считывает свойство length объекта this. Затем он считывает целочисленные свойства от start до end и определяет их в новом созданном массиве.

const arrayLike = {
  length: 3,
  0: 2,
  1: 3,
  2: 4,
  3: 33, // ignored by slice() since length is 3
};
console.log(Array.prototype.slice.call(arrayLike, 1, 3));
// [ 3, 4 ]

Использование slice() для преобразования объектов, похожих на массивы, в массивы

Метод slice() часто используется с bind() и call() для создания утилитарного метода, который преобразует объект, похожий на массив, в массив.

// slice() is called with `this` passed as the first argument
const slice = Function.prototype.call.bind(Array.prototype.slice);

function list() {
  return slice(arguments);
}

const listResult = list(1, 2, 3); // [1, 2, 3]

Использование slice() для разреженных массивов

Массив, возвращаемый из slice(), может быть разреженным, если источник разрежен.

console.log([1, 2, , 4, 5].slice(1, 4)); // [2, empty, 4]

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.slice

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
slice
1
12
1
4
1
18
4
10.1
1
1.0
1
1
1.0.0
1.0
0.10.0

См. также

  • Polyfill Array.prototype.slice в core-js
  • es-shims polyfill Array.prototype.slice
  • Руководство по индексированным коллекциям
  • Array
  • Array.prototype.pop()
  • Array.prototype.shift()
  • Array.prototype.concat()
  • Array.prototype.splice()
  • TypedArray.prototype.slice()
  • String.prototype.slice()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API