Array.prototype.slice()
Метод slice() (вирізати скибку, зріз) примірників Array повертає поверхневу копію (зріз) певної частини масиву, взяту від елемента за індексом start (включно) до елемента за індексом end (не включно), у вигляді нового масиву. Початковий масив не змінюється.
Спробуйте його в дії
Синтаксис
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опущено, використовуєтьсяarray.length, унаслідок чого вибираються всі елементи аж до кінця масиву.
- Якщо endвказує на позицію, що передує або дорівнює позиції, на яку вказуєstart, то повертається порожній масив.
 
- Від'ємний індекс рахується з кінця масиву: якщо 
Результат
Новий масив, що містить всі витягнуті елементи.
Опис
Метод slice() є копіювальним методом. Він не змінює this, а повертає поверхневу копію, котра містить частину тих самих елементів, що є у вихідному масиві.
Метод slice() зберігає порожні комірки. Якщо вирізана частка є розрідженою, то повернений масив буде розрідженим також.
Метод slice() є узагальненим. Він лишень очікує, що значення this матиме властивість length, а також властивості з цілочисловими ключами.
Приклади
Повернення частини наявного масиву
const fruits = ["Банан", "Апельсин", "Лимон", "Яблуко", "Манго"];
const citrus = fruits.slice(1, 3);
// fruits містить ['Банан', 'Апельсин', 'Лимон', 'Яблуко', 'Манго']
// citrus містить ['Апельсин','Лимон']
У цьому прикладі slice(1, 3) видобуває елементи від індексу 1 до (не включно) індексу 3, що породжує новий масив ['Апельсин', 'Лимон'].
Пропущення параметра end
const fruits = ["Яблуко", "Банан", "Апельсин", "Манго", "Ананас"];
const tropical = fruits.slice(2);
console.log(tropical); // ['Апельсин', 'Манго', 'Ананас']
У цьому прикладі slice(2) видобуває елементи від індексу 2 до кінця масиву.
Застосування від'ємних індексів
const fruits = ["Яблуко", "Банан", "Апельсин", "Манго", "Ананас"];
const lastTwo = fruits.slice(-2);
console.log(lastTwo); // ['Манго', 'Ананас']
У цьому прикладі slice(-2) видобуває останні два елементи масиву. Коли з методом slice використовується негативний індекс, то такі індекси рахуються від кінця масиву, починаючи від -1, що позначає останній елемент, -2 – другий із кінця, і так далі. Від'ємний індекс -2 також включається, бо є початковою точкою видобування.
|     |     |     |     |     |
|  S  |  L  |  I  |  C  |  E  |
|     |     |     |     |     |
  -5    -4    -3    -2    -1
<--- зворотна лічба
Застосування додатного індексу початку та від'ємного індексу кінця
const fruits = ["Яблуко", "Банан", "Апельсин", "Манго", "Ананас"];
// Застосування додатного індексу початку та від'ємного індексу кінця
const sliceExample = fruits.slice(1, -1);
console.log(sliceExample); // ['Банан', 'Апельсин', 'Манго']
У цьому прикладі slice(1, -1) починає видобування з індексу 1 і продовжує до (не включно) елемента за індексом -1 (тобто останнього елемента). Це породжує новий масив ['Банан', 'Апельсин', 'Манго']. Метод slice завжди виключає з видобування заданий кінцевий індекс незалежно від його додатності чи від'ємності.
пряма лічба --->
   0     1     2     3     4
|     |     |     |     |     |
|  S  |  L  |  I  |  C  |  E  |
|     |     |     |     |     |
  -5    -4    -3    -2    -1
<--- зворотна лічба
Застосування slice до масиву об'єктів
В цьому прикладі slice створює новий масив newCar з myCar. Обидва містять посилання на об'єкт myHonda. Коли колір myHonda змінюється на purple, обидва масиви показують цю зміну.
// За допомогою slice() створити newCar з myCar.
const myHonda = {
  color: "червоний",
  wheels: 4,
  engine: { cylinders: 4, size: 2.2 },
};
const myCar = [myHonda, 2, "чудовий стан", "придбана у 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);
// Змінити колір myHonda.
myHonda.color = "бузковий";
console.log("Новий колір моєї Honda –", myHonda.color);
console.log("myCar[0].color =", myCar[0].color);
console.log("newCar[0].color =", newCar[0].color);
Скрипт надрукує такий текст:
myCar = [
  {color: 'червоний', wheels: 4, engine: {cylinders: 4, size: 2.2 } },
  2,
  'чудовий стан','придбана у 1997'
]
newCar = [ { color: 'червоний', wheels: 4, engine: { cylinders: 4, size: 2.2 } }, 2 ]
myCar[0].color = червоний
newCar[0].color = червоний
Новий колір моєї Honda – бузковий
myCar[0].color = бузковий
newCar[0].color = бузковий
Виклик slice() на об'єктах-немасивах
Метод slice() зчитує з this властивість length. Потім він зчитує цілочислові властивості від start до end і визначає їх на новоствореному масиві.
const arrayLike = {
  length: 3,
  0: 2,
  1: 3,
  2: 4,
  3: 33, // ігнорується slice(), оскільки length – 3
};
console.log(Array.prototype.slice.call(arrayLike, 1, 3));
// [ 3, 4 ]
Використання slice() для перетворення масивоподібних об'єктів на масиви
Метод slice() нерідко використовується вкупі з bind() і call() для створення допоміжного методу, що перетворює масивоподібний об'єкт на масив.
// slice() викликається з `this`, переданим як перший аргумент
const slice = Function.prototype.call.bind(Array.prototype.slice);
function list() {
  return slice(arguments);
}
const list1 = list(1, 2, 3); // [1, 2, 3]
Використання slice() на розріджених масивах
Масив, повернений зі slice(), може бути розрідженим, якщо розрідженим є вихідний масив.
console.log([1, 2, , 4, 5].slice(1, 4)); // [2, порожньо, 4]
Специфікації
Сумісність із браузерами
| desktop | mobile | server | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| slice | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |