Untuk anak cucu: mengapa si penanya mengatakan kembali palsu tidak berhasil? Hampir setiap jawaban mengatakan untuk melakukan itu. Ingin tahu apakah itu mungkin karena itu hanya mengakhiri setiap loop. Pernyataan balik di dalam for-loop, sebaliknya, akan keluar dari loop dan fungsi panggilan . Untuk mendapatkan perilaku drastis seperti itu dari setiap loop, Anda harus mengatur bendera dengan lingkup penutupan di dalam setiap loop, lalu menanggapi bendera di luarnya.
Bob Stein
8
@ BobStein-VisiBone Seseorang menghapus komentar asli saya. Saya meletakkannya return falsedi tempat yang salah. Ketika saya memperbaikinya semuanya berfungsi.
Luke101
1
tidak yakin mengapa "pembaruan" mengatakan return falsetidak berfungsi $().each- karena itu benar.
billynoah
2
@ Luke101 Anda harus memperbarui pertanyaan untuk memperjelas apa yang tidak berfungsi. Tanya Jawab ini tidak masuk akal ketika pertanyaan Anda mengatakan bahwa jawaban yang diterima tidak berfungsi.
Kita dapat memecah loop $ .each () [..] dengan membuat fungsi callback menjadi false.
Kembalikan salah dalam callback:
function callback(indexInArray, valueOfElement){var booleanKeepGoing;this;// == valueOfElement (casted to Object)return booleanKeepGoing;// optional, unless false // and want to stop looping}
BTW, continuebekerja seperti ini:
Mengembalikan non-salah sama dengan pernyataan melanjutkan dalam for for; itu akan langsung melompat ke iterasi berikutnya.
Saya membuat Fiddle untuk jawaban atas pertanyaan ini karena jawaban yang diterima salah dan ini adalah utas StackOverflow pertama yang dikembalikan dari Google terkait pertanyaan ini.
Untuk keluar dari $. Setiap Anda harus menggunakan return false;
Saya suka biola, tapi saya tidak yakin mengapa Anda mengatakan jawaban yang diterima salah, karena Anda berdua mengatakan hal yang sama.
gitsitgo
34
Saya menemukan situasi di mana saya bertemu dengan kondisi yang merusak loop, namun kode setelah fungsi .each () masih dieksekusi. Saya kemudian mengatur bendera ke "true" dengan pemeriksaan langsung untuk bendera setelah fungsi .each () untuk memastikan kode yang diikuti tidak dieksekusi.
$('.groupName').each(function(){if($(this).text()== groupname){
alert('This group already exists');
breakOut =true;returnfalse;}});if(breakOut){
breakOut =false;returnfalse;}
"masing-masing" menggunakan fungsi panggilan balik. Fungsi panggilan balik menjalankan terlepas dari fungsi panggilan, sehingga tidak mungkin untuk kembali ke fungsi panggilan dari fungsi panggilan balik.
gunakan untuk loop jika Anda harus menghentikan eksekusi loop berdasarkan pada beberapa kondisi dan tetap berada di fungsi yang sama.
Saya tahu ini pertanyaan yang cukup lama tetapi saya tidak melihat jawaban apa pun, yang menjelaskan mengapa dan kapan mungkin untuk kembali.
Saya ingin menjelaskannya dengan 2 contoh sederhana:
1. Contoh: Dalam hal ini, kami memiliki iterasi sederhana dan kami ingin memutuskan dengan return true, jika kami dapat menemukan ketiganya.
function canFindThree(){for(var i =0; i <5; i++){if(i ===3){returntrue;}}}
jika kita memanggil fungsi ini, itu hanya akan mengembalikan yang benar.
2. Contoh Dalam kasus ini, kami ingin beralih dengan setiap fungsi jquery , yang menggunakan fungsi anonim sebagai parameter.
function canFindThree(){var result =false;
$.each([1,2,3,4,5],function(key,value){if(value===3){
result =true;returnfalse;//This will only exit the anonymous function and stop the iteration immediatelly.}});return result;//This will exit the function with return true;}
return false
di tempat yang salah. Ketika saya memperbaikinya semuanya berfungsi.return false
tidak berfungsi$().each
- karena itu benar.Jawaban:
Untuk
break
a$.each
atau$(selector).each
loop, Anda harus kembalifalse
ke loop callback.Mengembalikan
true
lompatan ke iterasi berikutnya, setara dengancontinue
dalam loop normal.sumber
false
in the loop callback."? Di mana tepatnya ini?$.each(array, function(key, value) { if(value == "foo") return false; });
$().each
dilakukan dengan cara yang persis sama, hasil edit Anda hanya menyebabkan kebingungan.Menurut dokumentasi
return false;
harus melakukan pekerjaan itu.Kembalikan salah dalam callback:
BTW,
continue
bekerja seperti ini:sumber
Saya membuat Fiddle untuk jawaban atas pertanyaan ini karena jawaban yang diterima salah dan ini adalah utas StackOverflow pertama yang dikembalikan dari Google terkait pertanyaan ini.
Untuk keluar dari $. Setiap Anda harus menggunakan
return false;
Ini Fiddle yang membuktikannya:
http://jsfiddle.net/9XqRy/
sumber
Saya menemukan situasi di mana saya bertemu dengan kondisi yang merusak loop, namun kode setelah fungsi .each () masih dieksekusi. Saya kemudian mengatur bendera ke "true" dengan pemeriksaan langsung untuk bendera setelah fungsi .each () untuk memastikan kode yang diikuti tidak dieksekusi.
sumber
"masing-masing" menggunakan fungsi panggilan balik. Fungsi panggilan balik menjalankan terlepas dari fungsi panggilan, sehingga tidak mungkin untuk kembali ke fungsi panggilan dari fungsi panggilan balik.
gunakan untuk loop jika Anda harus menghentikan eksekusi loop berdasarkan pada beberapa kondisi dan tetap berada di fungsi yang sama.
sumber
Saya tahu ini pertanyaan yang cukup lama tetapi saya tidak melihat jawaban apa pun, yang menjelaskan mengapa dan kapan mungkin untuk kembali.
Saya ingin menjelaskannya dengan 2 contoh sederhana:
1. Contoh: Dalam hal ini, kami memiliki iterasi sederhana dan kami ingin memutuskan dengan return true, jika kami dapat menemukan ketiganya.
jika kita memanggil fungsi ini, itu hanya akan mengembalikan yang benar.
2. Contoh Dalam kasus ini, kami ingin beralih dengan setiap fungsi jquery , yang menggunakan fungsi anonim sebagai parameter.
sumber