Bagaimana cara menghapus elemen dalam array di javascript?

138

Bagaimana cara menghapus 'bilah' kunci dari array foo sehingga 'bilah' tidak akan muncul

for(key in foo){alert(key);}
Steven Noble
sumber

Jawaban:

243

Jangan gunakan delete karena itu tidak akan menghapus elemen dari array, itu hanya akan mengaturnya sebagai tidak terdefinisi, yang kemudian tidak akan tercermin dengan benar dalam panjang array.

Jika Anda tahu kuncinya, Anda harus menggunakan sambatan yaitu

myArray.splice(key, 1);

Untuk seseorang di posisi Steven, Anda dapat mencoba sesuatu seperti ini:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

atau

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}
pergi
sumber
3
+1 Poin bagus, saya juga suka cara ini: ejohn.org/blog/javascript-array-remove
CMS
3
@ThiefMaster - Mau jelaskan? Saya tidak tahu apa artinya itu dan ingin belajar. Seperti biasa, pengeditan adalah 1.000.000 kali lebih baik daripada komentar tidak langsung; Anda harus tahu bahwa dengan jumlah perwakilan yang Anda miliki.
akan
21
Gunakan for (var key in myArray)alih-alih for (key in myArray)- keyadalah variabel global dan jika Anda memanggil fungsi di dalam loop yang memiliki masalah yang sama, Anda akan mendapatkan hasil yang tidak terduga.
ThiefMaster
2
Catatan, contoh kedua tidak berfungsi jika array memiliki beberapa item dalam satu baris yang cocok dengan 'bilah'. Indeks array akan bergeser dan Anda akan kehilangan splicing setengah dari item. Alih-alih, gunakan for for yang menurunkan indeks saat kecocokan ditemukan.
Dave Lancea
Untuk berbagai objek: stackoverflow.com/questions/15287865/…
Fedir RYKHTIK
52
delete foo[key];

: D


sumber
4
secara teknis itu tidak menjawab pertanyaan. dia mencari untuk menghapus kunci 'bar'. dan variabel kunci Anda tidak menyiratkan hal itu. : P
Kon
4
key = 'bar'; eval ("delete foo." + key); menyembunyikan ; D
olliej
3
Apakah TIDAK menggunakan eval. Menghapus kunci / indeks objek / array dapat dicapai dengan metode yang lebih sederhana tidak menggunakan eval.
Dinei
4
Sebenarnya jika Anda menghapus dari array yang diindeks dengan menghapus foo [key] itu akan menyimpan nilai dalam foo [key] = undefined dan foo.length akan tetap sama yang salah. Jadi gunakan SPLICE sebagai gantinya
Павел Иванов
gunakan delete foo [key] itu salah; harus menggunakan foo.splice (kunci, 1);
vnguyen
38

Catatan penting: Array JavaScript bukan array asosiatif seperti yang mungkin Anda gunakan dari PHP. Jika "kunci array" Anda adalah string, Anda tidak lagi beroperasi pada konten array. Array Anda adalah objek, dan Anda menggunakan notasi braket untuk mengakses anggota yang bernama <key name>. Jadi:

var myArray = [];
myArray ["bar"] = true;
myArray ["foo"] = true;
lansiran (myArray.length); // mengembalikan 0.

karena Anda belum menambahkan elemen ke array, Anda hanya memodifikasi anggota bar dan foo myArray.

John Factorial
sumber
37

Jika Anda tahu nama kuncinya, lakukan seperti ini:

delete array['key_name']
pengguna3177525
sumber
2
Ini bukan array! Ini adalah objek (ya, ini disebut array asosiatif di JS, tetapi tidak, mereka tidak benar-benar, dan metode ini berbahaya jika Anda benar-benar bekerja dengan array JS).
musim dingin
3

Inilah yang akan saya lakukan

 myArray.splice( myArray.indexOf('bar') , 1) 
stackoverflows
sumber
1
Metode Array.prototype.indexOf () mencari nilai dalam array, bukan untuk kunci. Jadi ini tidak akan berhasil.
Nadav