--- title: Array.prototype.slice() slug: Web/JavaScript/Reference/Global_Objects/Array/slice translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice ---
Method slice()
mengembalikan sebuah salinan dangkal dari sebagian array menjadi sebuah objek array baru yang dimulai dari start
sampai end
(end
tidak termasuk) dimana start
dan end
merupakan index dari item yang ada di array tersebut. Tidak merubah array asli.
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.
arr.slice([start[, end]])
start
{{optional_inline}}slice(-2)
mengekstrak dua elemen terakhir dari urutan.start
tidak terdefinisi, slice
memulai dari indeks ke 0
.start
lebih besar dari indeks urutan, array kosong akan dikembalikan.end
{{optional_inline}}slice
mengekstrak hingga tapi tidak termasuk end
. Sebagai contoh, slice(1,4)
mengekstrak elemen kedua menuju elemen ke-empat (indeks elemen 1, 2, dan 3).Indeks negatif bisa digunakan,
menunjukkan offset dari akhir urutan. slice(2,-1)
mengekstrak elemen ketiga menuju elemen kedua-ke-terakhir dalam urutan.
end
dihillangkan, slice
mengekstrak melalui akhir dari urutan (arr.length
).end
lebih besar dari panjang urutan, slice
mengkstrak melalui akhir urutan (arr.length
).Array baru berisi elemen yang diekstrak.
slice
does not alter the original array. It returns a shallow copy of elements from the original array. Elements of the original array are copied into the returned array as follows:
slice
copies object references into the new array. Both the original and new array refer to the same object. If a referenced object changes, the changes are visible to both the new and original arrays.slice
copies the values into the new array. Changes to the string, number, or boolean in one array do not affect the other array.If a new element is added to either array, the other array is not affected.
let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'] let citrus = fruits.slice(1, 3) // fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'] // citrus contains ['Orange','Lemon']
slice
In the following example, slice
creates a new array, newCar
, from myCar
. Both include a reference to the object myHonda
. When the color of myHonda
is changed to purple, both arrays reflect the change.
// Using slice, create newCar from 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) // Display the values of myCar, newCar, and the color of myHonda // referenced from both 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) // Change the color of myHonda. myHonda.color = 'purple' console.log('The new color of my Honda is ' + myHonda.color) // Display the color of myHonda referenced from both arrays. console.log('myCar[0].color = ' + myCar[0].color) console.log('newCar[0].color = ' + newCar[0].color)
This script writes:
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
method can also be called to convert Array-like objects/collections to a new Array. You just {{jsxref("Function.prototype.bind", "bind")}} the method to the object. The {{jsxref("Functions/arguments", "arguments")}} inside a function is an example of an 'array-like object'.
function list() { return Array.prototype.slice.call(arguments) } let list1 = list(1, 2, 3) // [1, 2, 3]
Binding can be done with the {{jsxref("Function.prototype.call", "call()")}} method of {{jsxref("Function.prototype")}} and it can also be reduced using [].slice.call(arguments)
instead of Array.prototype.slice.call
.
Anyway, it can be simplified using {{jsxref("Function.prototype.bind", "bind")}}.
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]
Specification |
---|
{{SpecName('ESDraft', '#sec-array.prototype.slice', 'Array.prototype.slice')}} |
{{Compat("javascript.builtins.Array.slice")}}