Bagaimana cara menghapus objek dari array? Saya ingin menghapus objek yang mencakup nama Kristian
dari someArray
. Sebagai contoh:
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Saya ingin mencapai:
someArray = [{name:"John", lines:"1,19,26,96"}];
javascript
arrays
Clem
sumber
sumber
Jawaban:
Anda dapat menggunakan beberapa metode untuk menghapus item dari Array:
Jika Anda ingin menghapus elemen di posisi
x
, gunakan:Atau
Membalas komentar @ chill182 : Anda dapat menghapus satu atau lebih elemen dari array menggunakan
Array.filter
, atauArray.splice
dikombinasikan denganArray.findIndex
(lihat MDN ), mis.sumber
findIndex
hasilnya sebelum menggunakannyasplice
. Jika tidak ada elemen dalam array yang cocok dengan kondisifindIndex
akan kembali-1
dan menempatkan ini langsung ke dalamsplice
akan menghasilkan penghapusan arbitrase dari elemen terakhir dalam array.Saya sarankan menggunakan lodash.js atau sugar.js untuk tugas-tugas umum seperti ini:
di sebagian besar proyek, memiliki seperangkat metode pembantu yang disediakan oleh perpustakaan seperti ini cukup berguna.
sumber
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
someArray = someArray.filter(function(e) { return e.Name !== "Kristian"; });
Solusi bersih adalah menggunakan
Array.filter
:Masalahnya adalah ini tidak berfungsi pada IE <9. Namun, Anda dapat memasukkan kode dari perpustakaan Javascript (mis. Underscore.js ) yang mengimplementasikan ini untuk browser apa pun.
sumber
someArray = someArray.filter(function(el) { return el.Name != "Kristian"; });
alamat itu, bukan?Bagaimana dengan ini?
sumber
$.each()
cache panjang array sebelum looping jadi jika Anda menghapus elemen$.each()
akan berjalan melewati akhir array (sekarang lebih pendek). (MakasomeArray[i]
akanundefined
danundefined.name
akan crash.)"Array" Anda seperti yang ditunjukkan adalah sintaks JavaScript yang tidak valid. Kurung keriting
{}
adalah untuk objek dengan pasangan nama / nilai properti, tetapi kurung siku[]
adalah untuk array - seperti:Dalam hal ini, Anda dapat menggunakan
.splice()
metode ini untuk menghapus item. Untuk menghapus item pertama (indeks 0), katakan:Jika Anda tidak tahu indeksnya tetapi ingin mencari melalui larik untuk menemukan item dengan nama "Kristian" untuk dihapus, Anda dapat melakukannya:
EDIT: Saya baru saja melihat pertanyaan Anda ditandai dengan "jQuery", jadi Anda dapat mencoba
$.grep()
metode ini :sumber
$.grep()
? Itu tidak menambahkan banyak dalam contoh ini, di mana ya, saya bisa meletakkan!=
, tetapi dalam kasus lain Anda mungkin sudah memiliki fungsi yang didefinisikan yang kebetulan melakukan tes yang berlawanan dengan apa yang ingin Anda grep, jadi daripada menentukan suatu fungsi tambahan Anda bisa menggunakan kelebihan itu untuk membalikkan hasilnya.function isEven(num) { return num%2===0 }
. Anda bisa menggunakan$.grep(someArray, isEven)
untuk mendapatkan angka genap dari array, atau$.grep(someArray, isEven, true)
untuk melakukan yang sebaliknya dan mendapatkan nilai-nilai non-genap.ES2015
Itu akan menghapus John !
sumber
Anda bisa menggunakan array.filter ().
misalnya
Fungsi panah:
sumber
Saya telah membuat fungsi dinamis mengambil objek Array, Key dan nilai dan mengembalikan array yang sama setelah menghapus objek yang diinginkan:
Contoh Lengkap: DEMO
sumber
Ini adalah fungsi yang berfungsi untuk saya:
sumber
Anda juga dapat mencoba melakukan sesuatu seperti ini:
sumber
sumber
Gunakan fungsi sambungan pada array. Tentukan posisi elemen mulai dan panjang berikutnya yang ingin Anda hapus.
sumber
Pilih UndercoreJS untuk pekerjaan sederhana dengan array.
Fungsi _.without () membantu menghapus elemen:
sumber
Dengan fungsi panah ES 6
sumber
Solusi paling sederhana adalah membuat peta yang menyimpan indeks untuk setiap objek dengan nama, seperti ini:
sumber
Meskipun ini mungkin tidak sesuai untuk situasi ini saya menemukan beberapa hari yang lalu Anda juga dapat menggunakan
delete
kata kunci untuk menghapus item dari array jika Anda tidak perlu mengubah ukuran array misalnyasumber
Jawaban ini
tidak berfungsi untuk beberapa catatan yang memenuhi persyaratan. Jika Anda memiliki dua catatan berurutan seperti itu, hanya yang pertama dihapus, dan yang lainnya dilewati. Anda harus menggunakan:
sebagai gantinya .
sumber
Tampaknya ada kesalahan dalam sintaksis array Anda sehingga dengan asumsi maksud Anda sebuah array sebagai kebalikan dari objek, Array.splice adalah teman Anda di sini:
sumber
Anda juga dapat menggunakan fungsi peta .
sumber
Anda juga bisa menggunakan
some
:sumber
Inilah yang saya gunakan.
Maka sesederhana seperti mengatakan
Ganti nomor apa pun di tempat tiga. Setelah output yang diharapkan seharusnya:
sumber
Jika Anda ingin menghapus semua kemunculan objek tertentu (berdasarkan kondisi tertentu) maka gunakan metode splice javascript di dalam untuk loop.
Karena menghapus objek akan memengaruhi panjang array, pastikan untuk mengurangi penghitung satu langkah, sehingga pemeriksaan panjang tetap utuh.
Cuplikan kode di atas menghapus semua objek dengan usia lebih dari 20.
sumber
Gunakan fungsi splice () javascript.
Ini dapat membantu: http://www.w3schools.com/jsref/jsref_splice.asp
sumber
splice (i, 1) di mana i adalah indeks inkremental dari array akan menghapus objek. Tapi ingat sambatan juga akan mengatur ulang panjang array jadi hati-hati untuk 'tidak terdefinisi'. Menggunakan contoh Anda, jika Anda menghapus 'Kristian', maka dalam eksekusi berikutnya dalam loop, saya akan menjadi 2 tetapi someArray akan menjadi panjang 1, oleh karena itu jika Anda mencoba untuk menghapus "John" Anda akan mendapatkan kesalahan "tidak ditentukan" . Salah satu solusi untuk ini meskipun tidak elegan adalah memiliki penghitung terpisah untuk melacak indeks elemen yang akan dihapus.
sumber
Hanya mengembalikan objek dari array yang propertinya
name
bukan "Kristian"Demo:
sumber
Konsep ini menggunakan Kendo Grid
sumber
Saya kira jawabannya sangat bercabang dan diikat.
Anda dapat menggunakan jalur berikut untuk menghapus objek array yang cocok dengan objek yang diberikan dalam jargon JavaScript modern.
sumber
Jika Anda ingin mengakses dan menghapus objek array, Anda dapat mencoba sesuatu seperti ini.
sumber