The delete
operator yang digunakan untuk menghapus sifat dari benda-benda.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Perhatikan bahwa, untuk array, ini tidak sama dengan menghapus elemen . Untuk menghapus elemen dari array, gunakan Array#splice
atau Array#pop
. Sebagai contoh:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Detail
delete
dalam JavaScript memiliki fungsi yang berbeda dengan kata kunci dalam C dan C ++: tidak secara langsung membebaskan memori. Sebaliknya, tujuan utamanya adalah untuk menghapus properti dari objek.
Untuk array, menghapus properti yang berkaitan dengan indeks, membuat array jarang (mis. Array dengan "lubang" di dalamnya). Sebagian besar browser menyatakan indeks array yang hilang ini sebagai "kosong".
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Perhatikan bahwa delete
tidak pindah array[3]
ke array[2]
.
Fungsi bawaan yang berbeda di JavaScript menangani array jarang.
for...in
akan melewatkan indeks kosong sepenuhnya.
for
Loop tradisional akan kembali undefined
untuk nilai pada indeks.
Setiap metode yang menggunakan Symbol.iterator
akan mengembalikan undefined
nilai pada indeks.
forEach
, map
dan reduce
hanya akan melewatkan indeks yang hilang.
Jadi, delete
operator tidak boleh digunakan untuk kasus umum menghapus elemen dari array. Array memiliki metode khusus untuk menghapus elemen dan mengalokasikan kembali memori: Array#splice()
dan Array#pop
.
Array # splice (mulai [, deleteCount [, item1 [, item2 [, ...]]]])
Array#splice
bermutasi array, dan mengembalikan indeks yang dihapus. deleteCount
elemen dihapus dari indeks start
, dan item1, item2... itemN
dimasukkan ke dalam array dari indeks start
. Jika deleteCount
dihilangkan maka elemen dari startIndex dihapus ke akhir array.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
Ada juga bernama sama, tetapi berbeda, fungsi pada Array.prototype
: Array#slice
.
Array # slice ([begin [, end]])
Array#slice
tidak merusak, dan mengembalikan array baru yang berisi indeks yang ditunjukkan dari start
ke end
. Jika end
dibiarkan tidak ditentukan, defaultnya ke akhir array. Jika end
positif, ini menentukan indeks non-inklusif berbasis nol untuk berhenti. Jika end
negatif, itu menentukan indeks untuk berhenti dengan menghitung kembali dari akhir array (mis. -1 akan menghilangkan indeks akhir). Jika end <= start
, hasilnya adalah array kosong.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
Array # pop
Array#pop
menghapus elemen terakhir dari array, dan mengembalikan elemen itu. Operasi ini mengubah panjang array.