Bagaimana cara beralih ke iterasi berikutnya di jQuery.each () util?


434

Saya mencoba untuk beralih melalui berbagai elemen. Dokumentasi jQuery mengatakan:

dokumentasi jquery.Each ()

Mengembalikan non-salah adalah sama dengan pernyataan melanjutkan dalam loop untuk, itu akan langsung melompat ke iterasi berikutnya.

Saya sudah mencoba memanggil 'kembali tidak palsu;' dan 'tidak salah;' (sans return) tidak ada yang melompat ke iterasi berikutnya. Sebagai gantinya, mereka memutus loop. Apa yang saya lewatkan?


9
Dalam kebijaksanaan mereka yang tak terbatas, bods di jQuery sekarang telah menghapus catatan ini dari dokumentasi - atau setidaknya, itu tidak ada di halaman untuk masing-masing () . Jadi saya sangat senang melihat pertanyaan ini masih dapat ditemukan di sini di SO, dan dengan ekstensi di Google, karena ini adalah salah satu hal sederhana yang selalu saya lupakan :)
— Doug McLean

Jawaban:


783

Yang mereka maksud dengan non-false adalah:

return true;

Jadi kode ini:

var arr = ["one", "two", "three", "four", "five"];
$.each(arr, function(i) {
  if (arr[i] == 'three') {
    return true;
  }
  console.log(arr[i]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

akan log one, two, four, five.


16
Untuk keluar hanya iterasi saat ini, cukup dengan mengembalikan 'kembali'. Dan untuk keluar dari semua iterasi, kembalikan false.
— Saulius

7
Nilainya mengatakan bahwa ini berfungsi karena Anda berada dalam suatu fungsi ketika kode ini dieksekusi.
— Ukuser32

ketika saya kembali (arr [i] === 'three'); mengapa itu tidak berfungsi ??
— ajayv

Bagi saya, non-false mean, Anda dapat mengembalikan apa pun kecuali return false;
— Hoang Trung

61

Dengan 'return non-false', mereka bermaksud mengembalikan nilai apa pun yang tidak akan berhasil menjadi boolean false. Sehingga Anda bisa kembali true, 1, 'non-false', atau apapun yang Anda bisa memikirkan.


20
mengapa tidak hanya demi alasan "kembali 'melanjutkan';"
— Alexander Mills

bagaimana dengan melanjutkan ;? yang bekerja dalam variasi C tajam saya bekerja dengan jadi saya hanya menebak itu akan memiliki efek yang sama di JS
— Brandito

@ Brando Ini tidak berjalan seperti loop normal - itu memanggil fungsi secara rekursif, jadi agar loop berlanjut, Anda harus mengakhiri pemrosesan di dalam fungsi.
— TJ L

5

Jenis Javascript memiliki ide 'kebenaran' dan 'kepalsuan'. Jika suatu variabel memiliki nilai maka, umumnya 9 seperti yang Anda akan lihat) itu memiliki 'kebenaran' - nol, atau tidak ada nilai cenderung 'kepalsuan'. Cuplikan di bawah ini dapat membantu:

var temp1; 
if ( temp1 )...  // false

var temp2 = true;
if ( temp2 )...  // true

var temp3 = "";
if ( temp3 ).... // false

var temp4 = "hello world";
if ( temp4 )...  // true

Semoga itu bisa membantu?

Juga, ada baiknya memeriksa video ini dari Douglas Crockford

pembaruan: terima kasih @cphpython karena telah menemukan tautan yang rusak - Saya telah memperbarui untuk menunjukkan versi yang berfungsi sekarang

Bahasa Javascript

Javascript - Bagian Yang Baik


1
Tautan terputus ... Btw, 0juga merupakan nilai palsu dan negasinya benar (dan sebaliknya ke nomor lain, misalnya !-42 === false).
— CPHPython

4

Jangan lupa bahwa Anda kadang-kadang bisa saja jatuh dari ujung blok untuk sampai ke iterasi berikutnya:

$(".row").each( function() {
    if ( ! leaveTheLoop ) {
        ... do stuff here ...
    }
});

Daripada benar-benar kembali seperti ini:

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});

3
Saya tidak bermaksud kasar tetapi ini adalah desain yang sangat mengerikan. Maksudku ... aku sudah melakukannya, di 2 tahun pertama kuliahku, ketika aku tidak tahu yang lebih baik (bahkan kemudian aku tidak menyukainya), tapi itu bukan sesuatu yang harus disarankan ...
— xDaizu

@ DanielParejoMuñoz, saya mendengar Anda, tetapi kami tidak setuju. Pilihan untuk tidak memiliki pernyataan pengembalian mungkin bukan sesuatu yang Anda sukai. Tapi saya akan menyampaikan bahwa itu adalah hal suka / tidak suka daripada hal yang baik / buruk. Tidak ada yang memiliki keunggulan jelas secara objektif.
— Lee Meador

4
ini memiliki kelemahan meningkatkan sarang
— Dave Cousineau

3

Loop hanya terputus jika Anda kembali secara harfiah false. Ex:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
   break;
}

Ini berarti Anda dapat mengembalikan apa pun, termasuk undefined, yang merupakan apa yang Anda kembalikan jika Anda tidak mengembalikan apa pun, sehingga Anda cukup menggunakan pernyataan pengembalian yang kosong:

$.each(collection, function (index, item) {
   if (!someTestCondition)
      return; // go to next iteration

   // otherwise do something
});

Mungkin ini dapat bervariasi menurut versi; ini berlaku untuk jquery 1.12.4. Tapi sungguh, ketika Anda keluar dari bagian bawah fungsi, Anda juga tidak mengembalikan apa-apa, dan itu sebabnya loop terus, jadi saya berharap bahwa tidak ada kemungkinan apa pun yang mengembalikan apa-apa tidak dapat melanjutkan loop. Kecuali mereka ingin memaksa semua orang untuk mulai kembali sesuatu untuk menjaga loop pergi, kembali tidak memiliki menjadi cara untuk menjaga itu terjadi.


-3

jQuery.noop () dapat membantu

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});

Tidak, fungsi noop () ini tidak membantu sama sekali. Ini hanya berfungsi karena blok "lain" tidak diaktifkan.
— Rauni Lillemets
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.