Array.prototype.slice()
O método slice()
devolve uma cópia rasa (é feita uma cópia dos pointers se for um objeto) de uma parte de uma matriz num novo objeto de array
selecionado do start
(início incluído) ao end
(fim excluído) onde o start
e o end
representam o índice de itens dessa matriz. A matriz original não é modificada.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
The source for this interactive demo is stored in a GitHub repository. If you'd like to contribute to the interactive demo project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Sintaxe
arr.slice([start[, end]])
Parâmetros
start
Optional- Indice de base zero, onde coméça a cópia.
- Um índice negativo pode ser utilizado, indicando um intervalo a partir do fim da sequência.
slice(-2)
extrai os dois últimos elementos da sequência. - Se
start
é undefined,slice
coméça a partir do indice0
. - Se
start
é maior que o último índice da sequência, uma matriz vazia é devolvida. end
Optional- Índice antes do qual se deve terminar a extração.
slice
extrai até o valor de indiceend
, mas sem incluirend
. Por exemplo,slice(1,4)
extrai do segundo até ao quarto elemento (elementos indexados 1, 2, e 3). - Pode ser utilizado um índice negativo, indicando o último índice a partir do fim da sequência.
slice(2,-1)
extrai do terceiro até ao penúltimo elemento na sequência. - Se
end
é omisso,slice
extrai todos os elementos até ao fim da sequência (arr.length
). - Se
end
é maior que o comprimento da sequência,slice
extrai todos os elementos até ao fim da sequência (arr.length
).
Resultado
Uma matriz nova contendo os elementos extraídos.
Descrição
slice
não altera a matriz original. Devolve uma cópia rasa dos elementos da matriz original. Os elementos da matriz original são copiados para a matriz devolvida como se segue:
- Para referências de objectos (e não o objecto real),
slice
copia as referências de objectos para a nova matriz. Tanto o original como a nova matriz referem-se ao mesmo objecto. Se um objecto referenciado mudar, as mudanças são visíveis tanto para a nova matriz como para a original. - Para strings, números e booleanos (não
String
,Number
eBooleano
objetos),slice
copia os valores para a nova matriz. Alterações à string, número, ou booleano numa matriz não afetam a outra matriz.
Se um novo elemento é adicionado a qualquer das matrizes, a outra matriz não é afetada.
Exemplos
Devolver uma porção duma matriz
let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
let citrus = fruits.slice(1, 3)
// fruits contêm ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
// citrus contêm ['Orange','Lemon']
Usar slice
No seguinte exemplo, slice
cria uma array (matriz), newCar
, a partir de myCar
. Ambos incluem uma referência ao objeto myHonda
. Quando a propriedade color (cor) de myHonda
é mudada para purple (roxo), ambas matrizes refletem a alteração.
// Usando slice, cria newCar a partir de myCar.
let myHonda = { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } }
let myCar = [myHonda, 2, 'cherry condition', 'purchased 1997']
let newCar = myCar.slice(0, 2)
// Imprime os valors de myCar, newCar, a propriadade
// color de myHonda em ambas arrays.
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)
// Mude a propriadade color de myHonda.
myHonda.color = 'purple'
console.log('A nova cor de my Honda é ' + myHonda.color)
// Imprime a propriadade color de myHonda em ambas arrays.
console.log('myCar[0].color = ' + myCar[0].color)
console.log('newCar[0].color = ' + newCar[0].color)
Este script imprime:
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 A nova cor de my Honda é purple myCar[0].color = purple newCar[0].color = purple
Objetos parecidos com Array
O método slice
tembém pode ser chamado para converter objetos / coleções do estilo matriz para um objeto Array
. É só preciso bind
(en-US) o método ao objeto. Os argumentos
dentro da função são um exemplo de um "objeto de estilo matriz".
function list() {
return Array.prototype.slice.call(arguments)
}
let list1 = list(1, 2, 3) // [1, 2, 3]
Binding pode ser feito com o método call()
de Function.prototype
(en-US) e também pode ser simplificado a usar [].slice.call(arguments)
invés de Array.prototype.slice.call
.
Pode ser simplificado a usar bind
(en-US).
let unboundSlice = Array.prototype.slice
let slice = Function.prototype.call.bind(unboundSlice)
function list() {
return slice(arguments)
}
let list1 = list(1, 2, 3) // [1, 2, 3]
Especificações
Compatibilidade
BCD tables only load in the browser