|
|
Array.prototype.slice() — JavaScript
Метод slice()
возвращает неглубокую копию части массива в новый объект массива, выбранный из start
по end
( end
not включено), где начало
и конец
представляют собой индекс элементов в этом массиве. Исходный массив не будет изменен.
Исходный код этой интерактивной демонстрации хранится в репозитории GitHub. Если вы хотите внести свой вклад в интерактивный демонстрационный проект, клонируйте https://github. com/mdn/interactive-examples и отправьте нам запрос на включение.
Синтаксис
обр .slice([ начало [ конец ]])
Параметры
-
пуск
Дополнительно - Отсчитываемый от нуля индекс, с которого следует начать извлечение.
- Можно использовать отрицательный индекс, указывающий смещение от конца последовательности.
извлекает два последних элемента последовательности. - Если
начало
не определено,срез
начинается с индекса0
. - Если
start
больше диапазона индексов последовательности, возвращается пустой массив. -
конец
Дополнительно - Начинающийся с нуля индекс перед , который завершает извлечение.
срез
экстракты доконец
, но не включая его.slice(1,4)
извлекает элементы со второго по четвертый (элементы с индексами 1, 2 и 3). - Можно использовать отрицательный индекс, указывающий смещение от конца последовательности.
slice(2,-1)
извлекает элементы от третьего до предпоследнего в последовательности. - Если
конец
опущен,срез
извлекается до конца последовательности (arr .length
). - Если
end
больше, чем длина последовательности,срез
извлекает до конца последовательности (обр .длина
).
Возвращаемое значение
Описание
срез
не изменяет исходный массив. Он возвращает неглубокую копию элементов исходного массива. Элементы исходного массива копируются в возвращаемый массив следующим образом:
- Для ссылок на объекты (а не для фактического объекта)
срез
копирует ссылки на объекты в новый массив. И исходный, и новый массив относятся к одному и тому же объекту. Если объект, на который делается ссылка, изменяется, эти изменения видны как в новом, так и в исходном массивах. - Для строк, чисел и логических значений (кроме объектов
,Number
и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