Katakanlah saya punya kode ini
var arr = [{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}];
dan saya ingin menghapus item dengan id = 3 dari array. Apakah ada cara untuk melakukan ini tanpa splicing? Bolehkah sesuatu menggunakan garis bawah atau sesuatu seperti itu?
Terima kasih!
javascript
underscore.js
memanjat
sumber
sumber
Jawaban:
Hanya menggunakan JavaScript biasa, ini sudah dijawab: hapus objek dari array oleh properti objek .
Menggunakan underscore.js, Anda dapat menggabungkan
.findWhere
dengan.without
:Meskipun, karena Anda membuat array baru dalam kasus ini, Anda bisa menggunakan
_.filter
atauArray.prototype.filter
fungsi asli (seperti yang ditunjukkan pada pertanyaan lain). Maka Anda hanya akan mengulangi array sekali daripada berpotensi dua kali seperti di sini.Jika Anda ingin memodifikasi array di tempat , Anda harus menggunakan
.splice
. Ini juga ditunjukkan dalam pertanyaan lain dan undescore sepertinya tidak menyediakan fungsi yang berguna untuk itu.sumber
_.reject
sepertinya pilihan yang lebih baik di sini.arr.pop()
...Anda dapat menggunakan Garis Bawah
.filter
Dapat juga ditulis sebagai:
Periksa Fiddle
Anda juga bisa menggunakan
.reject
sumber
_()
akan membuat wrapper di sekitar koleksi yang memungkinkan Anda menggunakan metode garis bawah.Gunakan Garis Bawah
_.reject()
:sumber
arr = _.reject(arr, d => d.id === 3 );
Underscore memiliki metode _without () yang sempurna untuk menghapus item dari array, terutama jika Anda memiliki objek untuk dihapus.
Bekerja dengan benda yang lebih kompleks juga.
Jika Anda tidak memiliki item untuk dihapus, hanya properti itu, Anda dapat menggunakan
_.findWhere
dan kemudian_.without
.sumber
{ Name: "Sam", Age: 19 }
ke tanpa, alih-alih variabel sam, itu tidak lagi berfungsi. FiddleHarap berhati-hati jika Anda memfilter string dan mencari filter case sensitif. _.without () peka huruf besar-kecil. Anda juga dapat menggunakan _.reject () seperti yang ditunjukkan di bawah ini.
sumber
Jawaban lain membuat salinan array baru, jika Anda ingin memodifikasi array di tempat yang dapat Anda gunakan:
Tetapi itu mengasumsikan bahwa elemen akan selalu ditemukan di dalam array (karena jika tidak ditemukan masih akan menghapus elemen terakhir). Agar aman, Anda dapat menggunakan:
sumber
atau cara praktis lain:
2 sen saya
sumber
object
dan mengembalikan sebuahobject
. karenanya tidak terlalu baik untuk bekerja denganArrays
tempat yang mungkin kita harapkan untuk mendapatkanarray
kembali setelah menghapus elemen._.without([1, 2, 1, 0, 3, 1, 4], 0, 1); => [2, 3, 4]
Gunakan dapat menggunakan plain JavaScript 's
Array#filter
metode seperti ini:Atau, gunakan
Array#reduce
danArray#concat
metode seperti ini:CATATAN:
sumber
Saya dulu mencoba metode ini
Mungkin ada metode yang lebih baik juga seperti solusi di atas yang disediakan oleh pengguna
sumber
Dengan Menggunakan underscore.js
Hasilnya akan ::
[{id:1name:'a'},{id:2,name:'c'}]
sumber
Anda dapat menggunakan metode tolak Garis Bawah, di bawah ini akan mengembalikan array baru yang tidak akan memiliki array dengan kecocokan tertentu
sumber