Misalkan saya punya kode ini:
var myArray = new Object();
myArray["firstname"] = "Bob";
myArray["lastname"] = "Smith";
myArray["age"] = 25;
Sekarang jika saya ingin menghapus "nama belakang"? .... apakah ada yang setara
myArray["lastname"].remove()
?
(Saya perlu elemen hilang karena jumlah elemen penting dan saya ingin menjaga semuanya tetap bersih.)
"Test" + {};
adalah pernyataan JS yang benar-benar valid.Jawaban:
Objek dalam JavaScript dapat dianggap sebagai array asosiatif, kunci pemetaan (properti) ke nilai.
Untuk menghapus properti dari objek dalam JavaScript, Anda menggunakan
delete
operator:Perhatikan bahwa ketika
delete
diterapkan ke properti indeks dariArray
, Anda akan membuat array yang jarang diisi (mis., Array dengan indeks yang hilang).Ketika bekerja dengan instance
Array
, jika Anda tidak ingin membuat array yang jarang diisi - dan biasanya tidak - maka Anda harus menggunakanArray#splice
atauArray#pop
.Perhatikan bahwa
delete
operator dalam JavaScript tidak langsung membebaskan memori. Tujuannya adalah untuk menghapus properti dari objek. Tentu saja, jika properti yang dihapus menyimpan satu-satunya referensi yang tersisa untuk suatu objeko
, makao
selanjutnya akan menjadi sampah yang dikumpulkan dengan cara normal.Menggunakan
delete
operator dapat memengaruhi kemampuan mesin JavaScript untuk mengoptimalkan kode .sumber
delete myArray[0]
. Lihat stackoverflow.com/a/9973592/426379 dan Menghapus elemen arraylength
Properti objek Array tetap tidak berubah.myArray
benar-benar digunakan sebagai array - tetapi tidak (myArray
nama yang disayangkan), itu adalah objek. Jadi dalam haldelete
ini OK. Perhatikan bahwa meskipun itu dibuat sebagainew Array()
dan digunakan sebagai array asosiatif itu masih akan OK. Peringatan Anda masih sesuatu yang harus diperhatikan jika seseorang menggunakan array nyata.Semua objek dalam JavaScript diimplementasikan sebagai hashtables / array asosiatif. Jadi, berikut ini adalah yang setara:
Dan, sebagaimana telah ditunjukkan, Anda "menghapus" properti dari objek melalui
delete
kata kunci, yang dapat Anda gunakan dengan dua cara:Semoga info tambahan membantu ...
sumber
myObj['some;property']
bekerja, tetapimyObj.some;property
tidak akan (karena alasan yang jelas). Juga mungkin tidak jelas bahwa Anda dapat menggunakan variabel dalam notasi braket, yaituvar x = 'SomeProperty'; alert(myObj[x])
Tak satu pun dari jawaban sebelumnya membahas fakta bahwa Javascript tidak memiliki array asosiatif untuk memulai - tidak ada
array
tipe seperti itu, lihattypeof
.Apa yang dimiliki Javascript, adalah instance objek dengan properti dinamis. Ketika properti bingung dengan elemen-elemen dari instance objek Array maka Bad Things ™ pasti akan terjadi:
Masalah
Larutan
Untuk memiliki fungsi penghapusan universal yang tidak meledak pada Anda, gunakan:
sumber
Array
yang ada di JS adalah objek, cobatypeof new Array();
atautypeof []
verifikasi.Array
hanyalah jenis objek tertentu dan sama sekali bukan "binatang yang berbeda". Di JS, objek dibedakan berdasarkan nama konstruktor dan rantai prototipe mereka, lihat pemrograman berbasis Prototipe .delete
operator sehubunganArray
dengan menyediakan fungsi polimorfik sederhana.delete
tidak memiliki kekurangan.delete
dirancang untuk menghapus properti. Itu dia. Menerapkan operator hapus ke indeks array akan menghapus indeks itu. Apa lagi yang perlu dilakukan? Anda dibiarkan dengan array jarang, yang merupakan fitur bahasa. Jika Anda tidak ingin array yang jarang, jangan hapus indeks: gunakansplice
ataupop
.Itu hanya menghapus menghapus objek tetapi masih mempertahankan panjang array yang sama.
Untuk menghapus Anda perlu melakukan sesuatu seperti:
sumber
Meskipun jawaban yang diterima benar, namun tidak ada penjelasan mengapa itu berhasil.
Pertama-tama, kode Anda harus mencerminkan fakta bahwa ini BUKAN array:
Perhatikan bahwa semua objek (termasuk
Array
s) dapat digunakan dengan cara ini. Namun, jangan berharap fungsi array JS standar (pop, push, ...) berfungsi pada objek!Seperti yang dikatakan dalam jawaban yang diterima, Anda dapat menggunakan
delete
untuk menghapus entri dari objek:Anda harus memutuskan rute mana yang ingin Anda ambil - baik menggunakan objek (array asosiatif / kamus) atau menggunakan array (peta). Jangan pernah mencampur keduanya.
sumber
Gunakan metode
splice
untuk sepenuhnya menghapus item dari array objek:sumber
Seperti jawaban lain telah dicatat, apa yang Anda gunakan bukan array Javascript, tetapi objek Javascript, yang bekerja hampir seperti array asosiatif dalam bahasa lain kecuali bahwa semua kunci dikonversi ke string. Peta baru menyimpan kunci sebagai tipe aslinya.
Jika Anda memiliki array dan bukan objek, Anda bisa menggunakan fungsi .filter array , untuk mengembalikan array baru tanpa item yang ingin Anda hapus:
Jika Anda memiliki peramban dan jQuery yang lebih lama, jQuery memiliki
$.grep
metode yang berfungsi serupa:sumber
Ada cara yang elegan dalam Panduan Gaya Airbnb untuk melakukan ini (ES7):
Hak Cipta: https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90
sumber
Anda menggunakan Object, Anda tidak memiliki array asosiatif untuk memulai. Dengan array asosiatif, menambah dan menghapus item berjalan seperti ini:
sumber
Anda dapat menghapus entri dari peta Anda dengan menetapkannya secara eksplisit ke 'tidak terdefinisi'. Seperti dalam kasus Anda:
sumber
Jika karena alasan apa pun tombol hapus tidak berfungsi (seperti itu tidak berfungsi untuk saya)
Anda dapat memisahkannya dan kemudian memfilter nilai yang tidak ditentukan
Jangan coba-coba dan rantai mereka karena sambungan mengembalikan elemen dihapus;
sumber
Kita juga bisa menggunakannya sebagai fungsi. Angular melempar beberapa kesalahan jika digunakan sebagai prototipe. Terima kasih @HarpyWar. Itu membantu saya memecahkan masalah.
sumber
Sangat mudah jika Anda memiliki ketergantungan garis bawah dalam proyek Anda -
sumber
Dengan menggunakan
"delete"
kata kunci, itu akan menghapus elemen array dari array di javascript.Sebagai contoh,
Pertimbangkan pernyataan berikut.
Baris terakhir dari kode akan menghapus elemen array yang kuncinya "status" dari array.
sumber
Tanpa perulangan / iterates kita mendapatkan hasil yang sama
sumber
Untuk "Array":
Jika Anda tahu indeksnya:
Jika Anda tahu nilainya:
Jawaban yang paling banyak dipilih untuk
delete
bekerja dengan baik dalam hal objek tetapi tidak untuk array nyata. Jika saya menggunakannyadelete
menghapus elemen dari loop tetapi membuat elemenempty
dan panjang array tidak akan berubah. Ini mungkin menjadi masalah dalam beberapa skenario.Sebagai contoh, jika saya melakukan myArray.toString () pada myArray setelah penghapusan melalui
delete
itu menciptakan entri kosong yaitu ,,sumber
Satu-satunya metode yang bekerja untuk saya:
pemakaian:
sumber