Saya sedang mencari cara untuk menghentikan iterasi _.each()
metode underscore.js , tetapi tidak dapat menemukan solusinya. jQuery .each()
dapat rusak jika Anda melakukannya return false
.
Apakah ada cara untuk berhenti menggarisbawahi masing-masing ()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
forEach
fungsi asli tidak menawarkan fitur ini juga.each
dengan penutupan (dalam kebanyakan bahasa), Anda ingin memfilter daftar Anda terlebih dahulu. Dengan begitu Anda tidak perlu khawatir untuk tidak melakukannya. Secara umum, jika Anda perlu istirahat lebih awal dari iterasi, mungkin ada cara lain yang bisa Anda lakukan.each
penutupan) mirip dengan JavaScript.Array.every
untuk meniru perilaku yang Anda inginkan.Jawaban:
Anda tidak dapat melepaskan diri dari
each
metode — ini mengemulasiforEach
perilaku metode asli , dan yang asliforEach
tidak menyediakan untuk keluar dari loop (selain melemparkan pengecualian).Namun, semua harapan tidak hilang! Anda dapat menggunakan
Array.every
metode ini. :)Dari tautan itu:
Dengan kata lain, Anda dapat melakukan sesuatu yang berbelit-belit seperti ini ( tautan ke JSFiddle ):
Ini akan mengingatkan
1
melalui3
, dan kemudian "pecah" keluar dari loop.Anda menggunakan underscore.js, sehingga Anda akan senang untuk mengetahui bahwa itu tidak memberikan
every
metode-mereka menyebutnyaevery
, tapi sebagai link yang menyebutkan, mereka juga menyediakan sebuah alias yang disebutall
.sumber
_.every()
atau_.all()
metode untuk array dalam garis bawah - jadi tetap gunakanArray.every()
.every
. Jadi hati-hati untuk keterbacaan._.each()
memiliki catatan khusus tentang fakta bahwa Anda tidak dapat keluar dari loop, dan menyarankan Anda menggunakannya_.find()
sebagai gantinya. http://underscorejs.org/#eachMemperbarui:
_.find akan lebih baik karena keluar dari loop ketika elemen ditemukan:
** Tua **
Jika Anda ingin melepaskan loop secara kondisional, gunakan _.filter api sebagai ganti _.each. Berikut ini cuplikan kode
sumber
_.find
tidak persis apa yang diminta: beralihlah ke daftar sampai panggilan balik kembalitrue
.Anda bisa melihat-lihat ke
_.some
bukannya_.each
._.some
berhenti melintasi daftar setelah predikat benar. Hasil dapat disimpan dalam variabel eksternal.Lihat http://underscorejs.org/#some
sumber
sumber
Mungkin Anda ingin Underscore's any () atau find (), yang akan berhenti memproses ketika suatu kondisi terpenuhi.
sumber
Seperti jawaban lainnya, itu tidak mungkin. Berikut adalah komentar tentang pemutus dalam isu garis bawah menggarisbawahi # 21
sumber
Anda tidak dapat memecah
forEach
dalam garis bawah, karena mengemulasi perilaku asli EcmaScript 5.sumber
Saya percaya jika array Anda sebenarnya adalah objek, Anda dapat kembali menggunakan objek kosong.
sumber
http://underscorejs.org/#each
sumber
Memperbarui:
Anda benar-benar dapat "memecahkan" dengan melemparkan kesalahan di dalam dan menangkapnya di luar: sesuatu seperti ini:
Ini jelas memiliki beberapa implikasi mengenai pengecualian lain yang dipicu oleh kode Anda dalam loop, jadi gunakan dengan hati-hati!
sumber
bekerja dalam kasus saya
sumber