(Pembaruan: Jawaban saya yang lain di sini memaparkan opsi non-jQuery jauh lebih menyeluruh. Opsi ketiga di bawah ini, jQuery.each
tidak ada di dalamnya.)
Empat opsi:
Loop umum:
var i;
for (i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
atau di ES2015 +:
for (let i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
Keuntungan : Terus terang, tidak ada ketergantungan pada jQuery, mudah dimengerti, tidak ada masalah dengan mempertahankan makna this
di dalam tubuh loop, tidak ada overhead panggilan fungsi yang tidak perlu (misalnya, secara teori lebih cepat, meskipun sebenarnya Anda harus memiliki begitu banyak elemen sehingga kemungkinan besar Anda akan memiliki masalah lain; detail ).
ES5 forEach
:
Pada ECMAScript5, array memiliki forEach
fungsi padanya yang membuatnya mudah untuk di-loop melalui array:
substr.forEach(function(item) {
// do something with `item`
});
Tautan ke dokumen
(Catatan: Ada banyak fungsi lainnya, tidak hanya forEach
; lihat jawaban yang dirujuk di atas untuk detailnya.)
Keuntungan : Deklaratif, dapat menggunakan fungsi prebuilt untuk iterator jika Anda memiliki satu berguna, jika tubuh loop Anda kompleks, pelingkupan panggilan fungsi terkadang berguna, tidak perlu untuk i
variabel dalam lingkup Anda yang berisi.
Kekurangan : Jika Anda menggunakan this
kode yang berisi dan Anda ingin menggunakan this
dalam Anda forEach
callback, Anda harus baik A) Tongkat itu dalam variabel sehingga Anda dapat menggunakannya dalam fungsi, B) Lulus sebagai argumen kedua untuk forEach
jadi forEach
menetapkannya sebagai this
selama panggilan balik, atau C) Gunakan fungsi panah ES2015 + , yang ditutup this
. Jika Anda tidak melakukan salah satu dari hal-hal itu, dalam panggilan balik this
akan undefined
(dalam mode ketat) atau objek global ( window
) dalam mode longgar. Dulu ada kerugian kedua yang forEach
tidak didukung secara universal, tetapi di sini pada tahun 2018, satu-satunya browser yang akan Anda forEach
temui adalah IE8 (dan itu tidak dapat dengan benar polyfilled di sana, baik).
ES2015 + for-of
:
for (const s of substr) { // Or `let` if you want to modify it in the loop body
// do something with `s`
}
Lihat jawaban yang ditautkan di bagian atas jawaban ini untuk perincian tentang cara kerjanya.
Keuntungan : Sederhana, lugas, menawarkan variabel ruang lingkup (atau konstan, di atas) untuk entri dari array.
Kekurangan : Tidak didukung dalam versi IE mana pun.
jQuery.each:
jQuery.each(substr, function(index, item) {
// do something with `item` (or `this` is also `item` if you like)
});
( Tautan ke dokumen )
Keuntungan : Semua kelebihan yang sama dengan forEach
, ditambah Anda tahu itu ada di sana karena Anda menggunakan jQuery.
Kekurangan : Jika Anda menggunakan this
kode yang berisi, Anda harus memasukkannya ke dalam variabel sehingga Anda dapat menggunakannya di dalam fungsi, karena this
berarti sesuatu yang lain di dalam fungsi.
Anda dapat menghindari this
hal itu, dengan menggunakan $.proxy
:
jQuery.each(substr, $.proxy(function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}, this));
... atau Function#bind
:
jQuery.each(substr, function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}.bind(this));
... atau di ES2015 ("ES6"), fungsi panah:
jQuery.each(substr, (index, item) => {
// do something with `item` (`this` is the same as it was outside)
});
Apa yang TIDAK harus dilakukan:
Jangan gunakan for..in
untuk ini (atau jika Anda melakukannya, lakukan dengan perlindungan yang tepat). Anda akan melihat orang berkata (pada kenyataannya, secara singkat ada jawaban di sini yang mengatakan itu), tetapi for..in
tidak melakukan apa yang dipikirkan banyak orang (itu melakukan sesuatu yang bahkan lebih berguna!). Secara khusus, for..in
loop melalui nama properti enumerable dari suatu objek (bukan indeks array). Karena array adalah objek, dan satu-satunya properti enumerable mereka secara default adalah indeks, sebagian besar tampaknya mengurutkan pekerjaan dalam penyebaran lembut. Tapi itu bukan asumsi yang aman bahwa Anda bisa menggunakannya untuk itu. Berikut ini eksplorasi: http://jsbin.com/exohi/3
Saya harus melunakkan "jangan" di atas. Jika Anda berurusan dengan array jarang (misalnya, array memiliki 15 elemen total tetapi indeks mereka bertebaran di kisaran 0 hingga 150.000 karena beberapa alasan, dan demikian length
juga 150.001), dan jika Anda menggunakan perlindungan yang tepat seperti hasOwnProperty
dan memeriksa nama properti benar-benar numerik (lihat tautan di atas), for..in
bisa menjadi cara yang masuk akal untuk menghindari banyak loop yang tidak perlu, karena hanya indeks yang dihuni yang akan disebutkan.
.each()
ataufor...in
untuk mengulang array umumnya merupakan ide yang buruk. Ini seperti usia yang lebih lambat daripada menggunakanfor
atauwhile
. Menggunakannyafor loop
bahkan merupakan ide bagus untuk menyimpanlength
properti sebelum di-loop.for (var i = 0, len = substr.length; i < len; ...
Function#bind
. :-) Poin bagus, ditambahkan.i++
dan++i
merupakan hasil dari ekspresi itu, yang tidak pernah digunakan dalam contoh di atas. Sebuahfor
lingkaran bekerja seperti ini: 1. Inisialisasi, 2. Test (berakhir jika salah), 3. Tubuh, 4. Update, 5. Kembali ke langkah 2. Hasil ekspresi pembaruan tidak digunakan untuk apa pun.jQuery.each ()
jQuery.each ()
iterasi array
pengulangan objek
contoh :
loop javascript untuk array
untuk loop
contoh
untuk masuk
untuk dari
untuk setiap
Sumber daya
Loop dan iterator MDN
sumber
Tidak perlu jquery di sini, hanya satu
for
loop yang berfungsi:sumber
Opsi 1:
for
-loop tradisionalDasar
for
-Loop tradisional memiliki tiga komponen:Ketiga komponen ini dipisahkan satu sama lain oleh
;
simbol. Konten untuk masing-masing dari ketiga komponen ini adalah opsional, yang berarti bahwa berikut ini adalah yang paling minimalfor
-loop mungkin:Tentu saja, Anda harus menyertakan
if(condition === true) { break; }
atau di suatuif(condition === true) { return; }
tempat di dalamfor
-loop untuk menghentikannya.Meskipun demikian, biasanya inisialisasi digunakan untuk mendeklarasikan indeks, kondisi ini digunakan untuk membandingkan indeks itu dengan nilai minimum atau maksimum, dan setelahnya digunakan untuk meningkatkan indeks:
Menggunakan
for
-loop tradtional untuk loop melalui arrayCara tradisional untuk mengulang melalui array, adalah ini:
Atau, jika Anda lebih suka mengulang ke belakang, Anda melakukan ini:
Namun, ada banyak variasi yang mungkin, seperti misalnya. yang ini :
... atau yang ini ...
... atau yang ini:
Mana yang paling berhasil adalah masalah selera pribadi dan kasus penggunaan khusus yang Anda laksanakan.
Catatan :Masing-masing variasi ini didukung oleh semua browser, termasuk yang lama!
Opsi 2:
while
-loopSalah satu alternatif untuk
Catatan :for
-loop adalahwhile
-loop. Untuk mengulang melalui array, Anda bisa melakukan ini:Seperti
for
-loops tradisional ,while
-Lop didukung bahkan oleh browser tertua.Juga, setiap loop sementara dapat ditulis ulang sebagai
for
-loop. Sebagai contoh,while
-loop di sini berperilaku sama persis seperti inifor
-loop:Opsi 3:
for...in
danfor...of
Dalam JavaScript, Anda juga dapat melakukan ini:
Ini harus digunakan dengan hati-hati, bagaimanapun, karena tidak berperilaku sama dengan tradisional
for
-lingkungan dalam semua kasus, dan ada efek samping potensial yang perlu dipertimbangkan. Lihat Mengapa menggunakan "untuk ... dalam" dengan iterasi array adalah ide yang buruk? untuk lebih jelasnya.Sebagai alternatif
Catatan :for...in
, sekarang ada juga untukfor...of
. Contoh berikut menunjukkan perbedaan antarafor...of
loop danfor...in
loop:Anda juga perlu mempertimbangkan bahwa tidak ada versi Internet Explorer yang mendukung
for...of
( Edge 12+ tidak) dan yangfor...in
memerlukan setidaknya IE10.Opsi 4:
Array.prototype.forEach()
Alternatif untuk
Catatan :For
-loops adalahArray.prototype.forEach()
, yang menggunakan sintaks berikut:Array.prototype.forEach()
didukung oleh semua browser modern, serta IE9 +.Opsi 5:
jQuery.each()
Selain empat opsi lain yang disebutkan, jQuery juga memiliki
foreach
variasi sendiri .Ini menggunakan sintaks berikut:
sumber
Gunakan
each()
fungsi jQuery.Berikut ini sebuah contoh:
sumber
Gunakan jQuery
each()
. Ada cara lain tetapi masing-masing dirancang untuk tujuan ini.Dan jangan menaruh koma setelah nomor terakhir.
sumber
Anda dapat menggunakan
for()
loop:sumber
Sintaks ES6 dengan fungsi panah dan interpolasi:
sumber
Coba ini:
sumber
Cara alternatif pengulangan melalui array / string dengan efek samping
sumber