Saya mencoba untuk menghapus elemen dalam array di a forEach
lingkaran, tetapi mengalami masalah dengan solusi standar yang pernah saya lihat.
Inilah yang sedang saya coba:
review.forEach(function(p){
if(p === '\u2022 \u2022 \u2022'){
console.log('YippeeeE!!!!!!!!!!!!!!!!')
review.splice(p, 1);
}
});
Saya tahu itu masuk ke dalam if
karena saya melihat YippeeeeeE!!!!!!!!!!!!!
di konsol.
MASALAH SAYA: Saya tahu bahwa loop for saya dan jika logikanya terdengar, tetapi upaya saya untuk menghapus elemen saat ini dari array gagal.
MEMPERBARUI:
Mencoba jawaban Xotic750, dan elemennya masih belum dihapus:
Inilah fungsi di kode saya:
review.forEach(function (item, index, object) {
if (item === '\u2022 \u2022 \u2022') {
console.log('YippeeeE!!!!!!!!!!!!!!!!')
object.splice(index, 1);
}
console.log('[' + item + ']');
});
Berikut adalah output di mana lariknya masih belum dihapus:
[Scott McNeil]
[reviewed 4 months ago]
[ Mitsubishi is AMAZING!!!]
YippeeeE!!!!!!!!!!!!!!!!
[• • •]
Jadi jelas akan masuk ke pernyataan if seperti yang diarahkan, tapi juga jelas bahwa [• • •] masih ada.
javascript
foreach
novicePrgrmr
sumber
sumber
forEach
? Jika Anda ingin menghapus item, fungsi yang paling tepat adalahfilter
.index
atribut daripadaitem
untuksplice
Jawaban:
Sepertinya Anda mencoba melakukan ini?
Iterasi dan mutasikan array menggunakan Array.prototype.splice
Yang berfungsi dengan baik untuk kasus sederhana di mana Anda tidak memiliki 2 nilai yang sama dengan item array yang berdekatan, jika tidak, Anda memiliki masalah ini.
Jadi apa yang dapat kita lakukan tentang masalah ini saat melakukan iterasi dan mutasi array? Solusi yang biasa dilakukan adalah bekerja secara terbalik. Menggunakan ES3 sementara tapi Anda bisa menggunakan untuk gula jika pilihan
Oke, tetapi Anda ingin menggunakan metode iterasi ES5. Nah dan pilihannya adalah menggunakan Array.prototype.filter tetapi ini tidak mengubah array asli tetapi membuat yang baru, jadi meskipun Anda bisa mendapatkan jawaban yang benar, itu bukan yang Anda tentukan.
Kita juga bisa menggunakan ES5 Array.prototype.reduceRight , bukan untuk properti pereduksi melainkan dengan properti iterasinya, yaitu iterasi secara terbalik.
Atau kita bisa menggunakan ES5 Array.protoype.indexOf seperti itu.
Tetapi Anda secara khusus ingin menggunakan ES5 Array.prototype.forEach , jadi apa yang bisa kami lakukan? Kita perlu menggunakan Array.prototype.slice untuk membuat salinan dangkal dari array dan Array.prototype.reverse sehingga kita dapat bekerja secara terbalik untuk mengubah array asli.
Akhirnya ES6 menawarkan kepada kita beberapa alternatif lebih lanjut, di mana kita tidak perlu membuat salinan dangkal dan membalikkannya. Terutama kita bisa menggunakan Generator dan Iterator . Namun dukungannya cukup rendah saat ini.
Sesuatu yang perlu diperhatikan dalam semua hal di atas adalah, jika Anda menghapus NaN dari array kemudian membandingkan dengan sama dengan tidak akan berfungsi karena di Javascript
NaN === NaN
salah. Tapi kita akan mengabaikan itu dalam solusi karena itu kasus edge lain yang tidak ditentukan.Jadi begitulah, jawaban yang lebih lengkap dengan solusi yang masih memiliki kasus tepi. Contoh kode pertama masih benar tetapi seperti yang dinyatakan, ini bukannya tanpa masalah.
sumber
console.log(review);
setelahforEach
, seperti dalam contoh saya.Gunakan
Array.prototype.filter
alih-alihforEach
:sumber
Meskipun jawaban Xotic750 memberikan beberapa poin bagus dan solusi yang mungkin, terkadang sederhana lebih baik .
Anda tahu bahwa array yang diiterasi sedang bermutasi dalam iterasinya sendiri (yaitu menghapus item => perubahan indeks), jadi logika paling sederhana adalah mundur dengan gaya lama
for
(bahasa à la C ):Jika Anda benar-benar memikirkannya, a
forEach
hanyalah gula sintaksis untuk satufor
lingkaran ... Jadi jika itu tidak membantu Anda, hentikan saja.sumber
Anda juga dapat menggunakan indexOf untuk melakukan ini
sumber
Saya mengerti bahwa Anda ingin menghapus dari array menggunakan kondisi dan memiliki array lain yang itemnya telah dihapus dari array. Benar?
Bagaimana dengan ini?
Semoga bantuan ini ...
Ngomong-ngomong, saya membandingkan 'for-loop' dengan 'forEach'.
Jika dihapus jika string berisi 'f', hasilnya berbeda.
Dan dihilangkan dengan setiap iterasi, juga hasilnya berbeda.
sumber
Berikut ini akan memberi Anda semua elemen yang tidak sama dengan karakter khusus Anda!
sumber
Inilah cara Anda melakukannya:
sumber
if
pernyataan.item, index, object