|
|
Array.prototype.slice() — JavaScript
Метод slice() возвращает неглубокую копию части массива в новый объект массива, выбранный из start по end ( end not включено), где начало и конец представляют собой индекс элементов в этом массиве. Исходный массив не будет изменен.
Исходный код этой интерактивной демонстрации хранится в репозитории GitHub. Если вы хотите внести свой вклад в интерактивный демонстрационный проект, клонируйте https://github.
com/mdn/interactive-examples и отправьте нам запрос на включение.
Синтаксис
обр .slice([ начало [ конец ]])
Параметры
-
пускДополнительно - Отсчитываемый от нуля индекс, с которого следует начать извлечение.
- Можно использовать отрицательный индекс, указывающий смещение от конца последовательности.
извлекает два последних элемента последовательности. slice(-2) - Если
началоне определено,срезначинается с индекса0. - Если
startбольше диапазона индексов последовательности, возвращается пустой массив. -
конецДополнительно - Начинающийся с нуля индекс перед , который завершает извлечение.
срезэкстракты доконец, но не включая его.
Например,slice(1,4)извлекает элементы со второго по четвертый (элементы с индексами 1, 2 и 3). - Можно использовать отрицательный индекс, указывающий смещение от конца последовательности.
slice(2,-1)извлекает элементы от третьего до предпоследнего в последовательности. - Если
конецопущен,срезизвлекается до конца последовательности (arr .length). - Если
endбольше, чем длина последовательности,срезизвлекает до конца последовательности (обр .длина).
Возвращаемое значение
Описание
срез не изменяет исходный массив. Он возвращает неглубокую копию элементов исходного массива. Элементы исходного массива копируются в возвращаемый массив следующим образом:
- Для ссылок на объекты (а не для фактического объекта)
срезкопирует ссылки на объекты в новый массив.
И исходный, и новый массив относятся к одному и тому же объекту. Если объект, на который делается ссылка, изменяется, эти изменения видны как в новом, так и в исходном массивах. - Для строк, чисел и логических значений (кроме объектов
, StringNumberиBoolean)срезкопирует значения в новый массив. Изменения строки, числа или логического значения в одном массиве не влияют на другой массив.
Если в любой из массивов добавляется новый элемент, это не влияет на другой массив.
Примеры
Вернуть часть существующего массива
let fruit = ['Банан', 'Апельсин', 'Лимон', 'Яблоко', 'Манго'] пусть цитрусовые = fruit.slice(1, 3) // фрукты содержат ['Банан', 'Апельсин', 'Лимон', 'Яблоко', 'Манго'] // цитрус содержит ['Апельсин','Лимон']
Использование среза >
В следующем примере срез создает новый массив newCar из myCar .
myHonda . Когда цвет myHonda изменяется на фиолетовый, оба массива отражают изменение. // Используя slice, создайте newCar из myCar.
let myHonda = { цвет: красный, колеса: 4, двигатель: { цилиндры: 4, размер: 2,2 } }
пусть myCar = [myHonda, 2, 'вишневое состояние', 'куплено 1997']
пусть newCar = myCar.slice(0, 2)
// Отображение значений myCar, newCar и цвета myHonda
// ссылка из обоих массивов.
console.log('myCar = ' + JSON.stringify(myCar))
console.log('newCar = ' + JSON.stringify(newCar))
console.log('myCar[0].color = ' + myCar[0].color)
console.log('newCar[0].color = ' + newCar[0].color)
// Изменяем цвет myHonda.
myHonda.color = 'фиолетовый'
console.log('Новый цвет моей Хонды - ' + myHonda.color)
// Отображаем цвет myHonda, на который ссылаются оба массива.
console.log('myCar[0].color = ' + myCar[0].color)
console.log('newCar[0].color = ' + newCar[0].color)
Этот скрипт пишет:
myCar = [{цвет: 'красный', количество колес: 4, двигатель: {цилиндров: 4, размер: 2,2}}, 2,
'вишневое состояние', 'приобретена в 1997 году']
newCar = [{цвет: 'красный', колёса: 4, двигатель: {цилиндры: 4, размер: 2,2}}, 2]
myCar[0].
color = красный
новыйАвтомобиль[0].color = красный
Новый цвет моей Хонды фиолетовый
myCar[0].color = фиолетовый
новыйАвтомобиль[0].color = фиолетовый
Массивоподобные объекты
метод slice также может быть вызван для преобразования объектов/коллекций, подобных массиву, в новый массив. Тебе всего привязать метод к объекту. Аргументы внутри функции являются примером «объекта, подобного массиву».
список функций () {
вернуть Array.prototype.slice.call(аргументы)
}
пусть список1 = список(1, 2, 3) // [1, 2, 3]
Связывание можно выполнить с помощью метода call() из Function.prototype , а также его можно уменьшить с помощью [].slice.call(arguments) вместо Array.prototype.slice.call .
Во всяком случае, это можно упростить, используя привязать .
пусть unboundSlice = Array.prototype.slice пусть slice = Function.prototype.call.bind(unboundSlice) список функций () { вернуть срез(аргументы) } пусть список1 = список(1, 2, 3) // [1, 2, 3]
Технические характеристики
| Спецификация |
|---|
| ECMAScript (ECMA-262) Определение «Array.prototype.slice» в этой спецификации. |
Совместимость с браузером
Таблица совместимости на этой странице создана из структурированных данных. Если вы хотите внести свой вклад в данные, посетите https://github.com/mdn/browser-compat-data и отправьте нам запрос на включение.
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | Node. js | |
Chrome slice 902 1905 | |||||||||||||
Легенда
- Полная поддержка
- Полная опора
См. также
-
Array.prototype.splice() -
Функция.прототип.вызов() -
Функция.прототип.bind()
Встроенный JavaScript: Массив: slice | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.
Могу ли я использовать
Поиск?
Встроенный JavaScript: Массив: slice
- global">
Глобальное использование
96,92% + 0% "=" 96,92%IE
- 6 - 10: Supported
- 11: Supported
Edge
- 12 - 109: Supported
- 110: Supported
Firefox
- 2 - 109: Supported
- 110: Supported
- 111–112: поддерживается
Chrome
- 4 - 109: Supported
- 110: Supported
- 111 - 113: Supported
Safari
- 3.1 - 16.2: Supported 62% - Supported"> 16.3: Supported
- 16.4 - TP: Supported
Opera
- 10 - 94: Поддержано
- 95: Поддержано
Safari на IOS
- 3,2 - 16,2: Поддержка
- 16.3: Поддержка 9012 2 9038.1038.1038.28.0354
- all: Support unknown
Android Browser
- 2.1 - 4.3: Not supported
- 4.4 - 4.4.4: Supported
- 109: Supported
Opera Mobile
- 12 - 12.1: Supported
- 73: Поддержано
Chrome для Android

length
Обработка ошибок.
..»> — плохо
И исходный, и новый массив относятся к одному и тому же объекту. Если объект, на который делается ссылка, изменяется, эти изменения видны как в новом, так и в исходном массивах.
color = красный
новыйАвтомобиль[0].color = красный
Новый цвет моей Хонды фиолетовый
myCar[0].color = фиолетовый
новыйАвтомобиль[0].color = фиолетовый
prototype.call.bind(unboundSlice)
список функций () {
вернуть срез(аргументы)
}
пусть список1 = список(1, 2, 3) // [1, 2, 3]
js
1