Di Jawa Anda bisa menggunakan for
loop untuk melintasi objek dalam array sebagai berikut:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray)
{
// Do something
}
Bisakah Anda melakukan hal yang sama dalam JavaScript?
javascript
arrays
loops
for-loop
Mark Szymanski
sumber
sumber
for-in
in
danof
itu dapat digunakan dan melakukan hal-hal yang berbeda. Kemudian Anda juga memilikiforEach
dan pengulangan berbasis indeks jelek dan menjengkelkan. Setiap bahasa modern lainnya membuat pengulangan koleksi menjadi mudah dan langsung tanpa kejutan atau kebingungan. JS juga bisa, tetapi tidak.Jawaban:
Anda memiliki beberapa opsi:
1.
for
Loop berurutan :Pro
break
dancontinue
mengalirkan pernyataan kontrolCons
2. Array.prototype.forEach
Spesifikasi ES5 memperkenalkan banyak metode array yang bermanfaat, salah satunya,
Array.prototype.forEach
dan memberikan kita cara ringkas untuk beralih ke array:Menjadi hampir sepuluh tahun saat penulisan spesifikasi ES5 dirilis (Desember 2009), telah diterapkan oleh hampir semua mesin modern di lingkungan desktop, server, dan seluler, sehingga aman untuk menggunakannya.
Dan dengan sintaks fungsi panah ES6, ini bahkan lebih ringkas:
Fungsi panah juga diterapkan secara luas kecuali jika Anda berencana untuk mendukung platform kuno (misalnya, IE11); kamu juga aman untuk pergi.
Pro
Cons
break
/continue
Biasanya, Anda dapat mengganti kebutuhan untuk
break
keluar dari loop imperatif dengan memfilter elemen array sebelum mengulanginya, misalnya:Perlu diingat jika Anda melakukan iterasi array untuk membangun array lain darinya , Anda harus menggunakan
map
, saya telah melihat anti-pola ini berkali-kali.Anti-pola:
Kasus penggunaan yang tepat dari peta :
Selain itu, jika Anda mencoba mengurangi larik menjadi nilai, misalnya, Anda ingin menjumlahkan larik angka, Anda harus menggunakan metode pengurangan .
Anti-pola:
Penggunaan yang tepat dari pengurangan :
3.
for-of
Pernyataan ES6Standar ES6 memperkenalkan konsep objek iterable dan mendefinisikan konstruk baru untuk data traversing,
for...of
pernyataan tersebut.Pernyataan ini berfungsi untuk semua jenis objek yang dapat diulang dan juga untuk generator (objek apa pun yang memiliki
[Symbol.iterator]
properti).Objek array adalah definisi bawaan bawaan di ES6, jadi Anda bisa menggunakan pernyataan ini pada mereka:
Pro
break
/continue
).Cons
Jangan gunakan
for...in
@zipcodeman menyarankan penggunaan
for...in
pernyataan, tetapi untuk iterating arrayfor-in
harus dihindari, pernyataan itu dimaksudkan untuk menyebutkan properti objek.Seharusnya tidak digunakan untuk objek seperti array karena:
Poin kedua adalah bahwa hal itu dapat memberi Anda banyak masalah, misalnya, jika Anda memperluas
Array.prototype
objek untuk memasukkan metode di sana, properti itu juga akan disebutkan.Sebagai contoh:
Kode di atas akan menghibur log "a", "b", "c", dan "foo!".
Itu menjadi masalah terutama jika Anda menggunakan beberapa perpustakaan yang sangat bergantung pada augmentasi prototipe asli (seperti MooTools, misalnya).
The
for-in
pernyataan seperti yang saya katakan sebelumnya ada untuk menghitung properti obyek, misalnya:Dalam contoh di atas,
hasOwnProperty
metode ini memungkinkan Anda untuk menghitung hanya properti sendiri , hanya itu, hanya properti yang dimiliki objek secara fisik, tanpa properti yang diwariskan.Saya akan merekomendasikan Anda untuk membaca artikel berikut:
sumber
false
,undefined
,0
,""
,NaN
.Ya, dengan asumsi implementasi Anda mencakup
for
...of
fitur yang diperkenalkan dalam ECMAScript 2015 (rilis "Harmony") ... yang merupakan asumsi yang cukup aman akhir-akhir ini.Ini berfungsi seperti ini:
Atau lebih baik lagi, karena ECMAScript 2015 juga menyediakan variabel blok-tertutup:
(Variabel
s
berbeda pada setiap iterasi, tetapi masih dapat dideklarasikanconst
di dalam loop body selama itu tidak dimodifikasi di sana.)Catatan tentang array jarang: array dalam JavaScript mungkin tidak benar-benar menyimpan item sebanyak yang dilaporkan oleh-nya
length
; angka yang dilaporkan hanyalah satu lebih besar dari indeks tertinggi tempat nilai disimpan. Jika array memiliki lebih sedikit elemen daripada yang ditunjukkan oleh panjangnya, itu dikatakan jarang . Misalnya, sangat sah untuk memiliki array dengan item hanya di indeks 3, 12, dan 247; yang dari array tersebut dilaporkan sebagai 248, meskipun itu hanya benar-benar menyimpan 3 nilai. Jika Anda mencoba mengakses item di indeks lain mana pun, array akan nampak memiliki nilai di sana. Jadi ketika Anda ingin "loop through" sebuah array, Anda memiliki pertanyaan untuk dijawab: apakah Anda ingin mengulang seluruh rentang yang ditunjukkan oleh panjang dan prosesnya untuk elemen yang hilang, atau apakah Anda hanya ingin memproses elemen yang benar-benar ada? Ada banyak aplikasi untuk kedua pendekatan; itu hanya tergantung pada apa yang Anda gunakan untuk array.length
undefined
undefined
Jika Anda beralih di atas array dengan
for
..of
, badan loop dijalankanlength
kali, dan variabel kontrol loop diatur keundefined
untuk setiap item yang tidak benar-benar hadir dalam array. Bergantung pada detail kode "lakukan sesuatu dengan" Anda, perilaku itu mungkin yang Anda inginkan, tetapi jika tidak, Anda harus menggunakan pendekatan yang berbeda.Tentu saja, beberapa pengembang tidak punya pilihan selain menggunakan pendekatan yang berbeda pula, karena untuk alasan apa pun yang mereka menargetkan versi JavaScript yang belum mendukung
for
...of
.Selama implementasi JavaScript Anda sesuai dengan edisi sebelumnya dari spesifikasi ECMAScript (yang mengesampingkan, misalnya, versi Internet Explorer sebelum 9), maka Anda dapat menggunakan
Array#forEach
metode iterator alih-alih loop. Dalam hal ini, Anda melewatkan fungsi untuk dipanggil pada setiap item dalam array:Tidak seperti
for
...of
,.forEach
hanya memanggil fungsi untuk elemen yang sebenarnya ada dalam array. Jika melewati susunan hipotesis kami dengan tiga elemen dan panjang 248, ia hanya akan memanggil fungsi tiga kali, bukan 248 kali. Ini juga membedakan antara elemen yang hilang dan elemen yang sebenarnya diaturundefined
; untuk yang terakhir, masih akan memanggil fungsi, lewatundefined
sebagai argumen. Jika ini adalah bagaimana Anda ingin menangani array jarang,.forEach
mungkin cara untuk pergi bahkan jika dukungan juru Andafor
...of
.Opsi terakhir, yang bekerja di semua versi JavaScript, adalah loop penghitungan eksplisit . Anda cukup menghitung dari 0 hingga kurang dari panjang dan menggunakan penghitung sebagai indeks. Loop dasar terlihat seperti ini:
Salah satu keuntungan dari pendekatan ini adalah Anda dapat memilih cara menangani array yang jarang; kode di atas akan menjalankan tubuh loop penuh
length
kali, dengans
set untukundefined
untuk setiap elemen yang hilang, sepertifor
..of
. Jika Anda hanya ingin menangani elemen yang sebenarnya ada dari array jarang.forEach
, Anda dapat menambahkanin
tes sederhana pada indeks:Menetapkan nilai panjang ke variabel lokal (sebagai lawan untuk memasukkan
myStringArray.length
ekspresi penuh dalam kondisi loop) dapat membuat perbedaan yang signifikan dalam kinerja karena melewatkan pencarian properti setiap kali; menggunakan Badak di mesin saya, speedup adalah 43%.Anda mungkin melihat caching panjang dilakukan dalam klausul inisialisasi loop, seperti ini:
Lingkaran penghitungan eksplisit juga berarti Anda memiliki akses ke indeks setiap nilai, jika Anda menginginkannya. Indeks ini juga diteruskan sebagai parameter tambahan ke fungsi yang Anda berikan
forEach
, sehingga Anda dapat mengaksesnya juga:for
...of
tidak memberi Anda indeks yang terkait dengan setiap objek, tetapi selama objek yang Anda iterasi sebenarnya adalahArray
(for
..of
berfungsi untuk jenis iterable lainnya yang mungkin tidak memiliki metode ini), Anda dapat menggunakan Array Metode #entries untuk mengubahnya menjadi array pasangan [indeks, item], dan kemudian beralih lagi:The
for
...in
sintaks disebutkan oleh orang lain adalah untuk mengulang melalui properti obyek; karena Array dalam JavaScript hanyalah sebuah objek dengan nama properti numerik (danlength
properti yang diperbarui secara otomatis ), Anda secara teoritis dapat mengulang Array dengannya. Tetapi masalahnya adalah bahwa itu tidak membatasi diri pada nilai properti numerik (ingat bahwa bahkan metode sebenarnya hanya properti yang nilainya merupakan penutupan), juga tidak dijamin untuk beralih daripada yang dalam urutan numerik. Oleh karena itu,for
...in
sintaks tidak boleh digunakan untuk perulangan melalui Array.sumber
i in myStringArray
contoh Anda? Bagaimana itu bisa salah?a=[1,2,3,4]; delete a[2]; for (j in a) { console.log(j); }
keluaran 0, 1, 3, dan 4.a.length
masih 5.for j in a
. Saya menunjukkan bahwain
cek tersebut tidak berlebihan, seperti yang Anda nyatakan, dengan menunjukkan semua indeks dan menunjukkan bahwa ada satu di antara 0 danlength-1
yang tidak ada. Saya juga bisa saja mencetak2 in a
, yang memangfalse
, terlepas dari kenyataan bahwa Anda mengatakan itu tidak mungkin.Anda dapat menggunakan
map
, yang merupakan teknik pemrograman fungsional yang juga tersedia dalam bahasa lain seperti Python dan Haskell .Sintaks umumnya adalah:
Secara umum
func
akan mengambil satu parameter, yang merupakan item dari array. Tetapi dalam kasus JavaScript, dapat mengambil parameter kedua yang merupakan indeks item, dan parameter ketiga yang merupakan array itu sendiri.Nilai kembalian dari
array.map
array lain, sehingga Anda dapat menggunakannya seperti ini:Dan sekarang x adalah
[10,20,30,40]
.Anda tidak harus menulis fungsi sebaris. Bisa jadi fungsi yang terpisah.
yang akan setara dengan:
Kecuali Anda tidak mendapatkan
new_list
.sumber
Array.forEach
.map
adalah untuk menghasilkan array baru.Array.prototype.map
metode ini merupakan bagian dari Standar ECMAScript Edisi 5, belum tersedia pada semua implementasi (mis. IE tidak memilikinya), juga untuk iterating melalui array. Saya pikirArray.prototype.forEach
metode ini lebih benar secara semantik ... juga tolong jangan ' t menyarankan pernyataan untuk-masuk, lihat jawaban saya untuk lebih jelasnya :)forEach
danmap
adalah bahwa yang pertama tidak mengembalikan hasil iterasi.map
(Kadang-kadang aliascollect
, tetapi sangat berbeda dariapply
) secara tegas untuk mengubah setiap elemen dari array menjadi hasil yang sesuai; ini pemetaan 1-ke-1 , karenanya namanya. Ini adalah bagian dari seluruh keluarga operasi yang mencakupreduce
(yang menghasilkan hasil tunggal dari seluruh array) danfilter
(yang menghasilkan subset dari array asli) dan seterusnya. PadahalforEach
hanya melakukan sesuatu dengan setiap elemen, semantik tidak ditentukan.Dalam JavaScript, tidak disarankan untuk mengulang melalui Array dengan for-in loop, tetapi lebih baik menggunakan
for
loop seperti:Ini dioptimalkan juga ("caching" panjang array). Jika Anda ingin mempelajari lebih lanjut, baca posting saya tentang masalah ini .
sumber
++i
bukannyai++
++i
adalah optimasi sekolah lama yang dilakukan oleh kompiler modern untuk Anda dalam for for sejak dulu :) stackoverflow.com/a/1547433/1033348i_stop
ataui_end
bukanlen
. Ini hanya dapat dibaca (jika tidak lebih dari itu!), Dan Anda secara alami akan menghindari masalah semacam ini (karena loop Anda yang lain akan mendapatkan, misalnya,j_stop
).untuk (mis. myStringArray) {
(Langsung menjawab pertanyaan Anda: sekarang Anda bisa!)
Sebagian besar jawaban lain benar, tetapi mereka tidak menyebutkan (pada tulisan ini) bahwa ECMA Script
62015 membawa mekanisme baru untuk melakukan iterasi,for..of
loop.Sintaks baru ini adalah cara paling elegan untuk melakukan iterasi array di javascript (selama Anda tidak memerlukan indeks iterasi).
Saat ini bekerja dengan Firefox 13+, Chrome 37+ dan tidak berfungsi dengan browser lain (lihat kompatibilitas browser di bawah). Untungnya kami memiliki kompiler JS (seperti Babel ) yang memungkinkan kami untuk menggunakan fitur generasi mendatang hari ini.
Ini juga berfungsi pada Node (saya mengujinya pada versi 0.12.0).
Iterasi sebuah array
Iterasi berbagai objek
Iterasi generator:
(Contoh diekstrak dari https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of )
Tabel kompatibilitas: http://kangax.github.io/es5-compat-table/es6/#For..of loop
Spec: http://wiki.ecmascript.org/doku.php?id=harmony:iterators
}
sumber
const s
bukanvar s
var s of arr
hampir dua kali lipat (1.9x) waktu eksekusi dibandingkan dengan menggunakan penghitung sederhana untuk-loop dan mengambil elemen dengan indeks dalam nodejsOpera, Safari, Firefox, dan Chrome sekarang semuanya berbagi serangkaian metode Array yang disempurnakan untuk mengoptimalkan banyak loop umum.
Anda mungkin tidak membutuhkan semuanya, tetapi mereka bisa sangat berguna, atau jika semua browser mendukungnya.
Mozilla Labs menerbitkan algoritme yang mereka dan WebKit gunakan, sehingga Anda dapat menambahkannya sendiri.
filter mengembalikan array item yang memenuhi beberapa kondisi atau pengujian.
setiap mengembalikan true jika setiap anggota array lulus tes.
beberapa mengembalikan true jika ada yang lulus tes.
forEach menjalankan fungsi pada setiap anggota array dan tidak mengembalikan apa pun.
map seperti forEach, tetapi mengembalikan array hasil operasi untuk setiap elemen.
Metode-metode ini semua mengambil fungsi untuk argumen pertama mereka dan memiliki argumen kedua opsional, yang merupakan objek yang cakupannya ingin Anda terapkan pada anggota array saat mereka mengulangi fungsi.
Abaikan sampai Anda membutuhkannya.
indexOf dan lastIndexOf menemukan posisi yang tepat dari elemen pertama atau terakhir yang cocok dengan argumennya.
sumber
Intro
Sejak saya masih kuliah, saya sudah memprogram di Java, JavaScript, Pascal, ABAP , PHP, Progress 4GL, C / C ++ dan mungkin beberapa bahasa lain yang tidak dapat saya pikirkan saat ini.
Sementara mereka semua memiliki keistimewaan linguistik mereka sendiri, masing-masing bahasa ini memiliki banyak konsep dasar yang sama. Konsep-konsep tersebut meliputi prosedur / fungsi,
IF
pernyataan,FOR
-loop, danWHILE
-loop.for
-Lingkaran tradisionalfor
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 yang berikut ini adalahfor
loop seminimal mungkin:Tentu saja, Anda perlu memasukkan
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 tradisional 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:
Apapun yang paling berhasil adalah masalah selera pribadi dan kasus penggunaan khusus yang Anda laksanakan.
Perhatikan bahwa masing-masing variasi ini didukung oleh semua browser, termasuk yang sangat lama!
Satu
while
lingkaranSatu alternatif untuk satu
for
loop adalah satuwhile
loop. Untuk mengulang melalui array, Anda bisa melakukan ini:Seperti
for
loop tradisional ,while
loop didukung bahkan oleh browser tertua.Juga, perhatikan bahwa setiap loop sementara dapat ditulis ulang sebagai
for
loop. Sebagai contoh,while
loop di sini berperilaku dengan cara yang sama persis seperti inifor
-loop:For...in
danfor...of
Dalam JavaScript, Anda juga dapat melakukan ini:
Ini harus digunakan dengan hati-hati, karena tidak berperilaku sama dengan
for
loop tradisional 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
for...in
, sekarang ada juga untukfor...of
. Contoh berikut menunjukkan perbedaan antarafor...of
loop danfor...in
loop:Selain itu, Anda perlu mempertimbangkan bahwa tidak ada versi Internet Explorer yang mendukung
for...of
( Edge 12+ tidak) dan yangfor...in
membutuhkan setidaknya Internet Explorer 10.Array.prototype.forEach()
Alternatif untuk
for
-loops adalahArray.prototype.forEach()
, yang menggunakan sintaks berikut:Array.prototype.forEach()
didukung oleh semua browser modern, serta Internet Explorer 9 dan yang lebih baru.Perpustakaan
Akhirnya, banyak perpustakaan utilitas juga memiliki
foreach
variasi sendiri . AFAIK, tiga yang paling populer adalah ini:jQuery.each()
, di jQuery :_.each()
, di Underscore.js :_.forEach()
, di Lodash.js :sumber
Gunakan loop sementara ...
log: 'satu', 'dua', 'tiga'
Dan untuk urutan terbalik, loop yang lebih efisien
log: 'tiga', 'dua', 'satu'
Atau
for
lingkaran klasiklog: 'satu', 'dua', 'tiga'
Referensi: http://www.sitepoint.com/google-closure-how-not-to-write-javascript/
sumber
Jika Anda ingin cara singkat untuk menulis perulangan cepat dan Anda dapat mengulanginya secara terbalik:
Ini memiliki keuntungan dari caching panjang (mirip dengan
for (var i=0, len=myArray.length; i<len; ++i)
dan tidak sepertifor (var i=0; i<myArray.length; ++i)
) sementara menjadi lebih sedikit karakter untuk diketik.Bahkan ada saat-saat ketika Anda harus mengulang secara terbalik, seperti ketika mengulangi NodeList langsung di mana Anda berencana untuk menghapus item dari DOM selama iterasi.
sumber
for (var i=0,len=array.length;i<len;++i)
adalah pengulangan yang umum dan masuk akal untuk ditulis.Beberapa kasus menggunakan perulangan melalui array dengan cara pemrograman fungsional dalam JavaScript:
1. Hanya loop melalui array
Catatan: Array.prototype.forEach () bukan merupakan cara yang fungsional, karena fungsi yang diperlukan karena parameter input tidak seharusnya mengembalikan nilai, yang dengan demikian tidak dapat dianggap sebagai fungsi murni.
2. Periksa apakah ada elemen dalam array yang lulus tes
3. Transformasikan ke array baru
Catatan: Metode map () membuat array baru dengan hasil memanggil fungsi yang disediakan pada setiap elemen dalam array panggilan.
4. Jumlahkan properti tertentu, dan hitung rata-rata
5. Buat array baru berdasarkan yang asli tetapi tanpa mengubahnya
6. Hitung jumlah setiap kategori
7. Ambil subset array berdasarkan kriteria tertentu
Catatan: Metode filter () membuat array baru dengan semua elemen yang lulus tes diimplementasikan oleh fungsi yang disediakan.
8. Urutkan sebuah array
9. Temukan elemen dalam array
Metode Array.prototype.find () mengembalikan nilai elemen pertama dalam array yang memenuhi fungsi pengujian yang disediakan.
Referensi
sumber
Ada cara untuk melakukannya di mana Anda memiliki sangat sedikit ruang lingkup implisit dalam loop Anda dan menghapus variabel tambahan.
Atau jika Anda benar-benar ingin mendapatkan id dan memiliki
for
loop yang benar-benar klasik :Browser modern semua metode dukungan iterator
forEach
,map
,reduce
,filter
dan sejumlah metode lain pada prototipe Array .sumber
Ada berbagai cara untuk mengulang array di JavaScript.
Loop umum:
Masing-masing ES5:
jQuery.each:
Lihat ini untuk informasi terperinci atau Anda juga dapat memeriksa MDN untuk mengulang melalui array di JavaScript & menggunakan jQuery untuk memeriksa jQuery .
sumber
Saya benar-benar akan merekomendasikan memanfaatkan perpustakaan underscore.js . Ini memberi Anda berbagai fungsi yang dapat Anda gunakan untuk beralih di atas array / koleksi.
Contohnya:
sumber
underscore
jika ECMA-262 telah ditambahkanforEach
methor. Kode asli selalu lebih baik.Lingkaran array:
Lingkaran objek:
sumber
Ya , Anda dapat melakukan hal yang sama dalam JavaScript menggunakan loop, tetapi tidak terbatas pada itu, ada banyak cara untuk melakukan loop over array dalam JavaScript. Bayangkan Anda memiliki larik ini di bawah, dan Anda ingin mengulanginya:
Ini solusinya:
1) Untuk loop
Sebuah
for
lingkaran adalah cara yang umum perulangan melalui array dalam JavaScript, tetapi tidak ada dianggap sebagai solusi tercepat untuk array besar:2) Sementara loop
Loop sementara dianggap sebagai cara tercepat untuk mengulang melalui array panjang, tetapi biasanya kurang digunakan dalam kode JavaScript:
3) Lakukan ketika
A
do while
melakukan hal yang samawhile
dengan beberapa perbedaan sintaksis seperti di bawah ini:Ini adalah cara utama untuk melakukan loop JavaScript, tetapi ada beberapa cara lain untuk melakukannya.
Kami juga menggunakan
for in
loop untuk mengulang objek di JavaScript.Juga melihat
map()
,filter()
,reduce()
, dll fungsi pada Array dalam JavaScript. Mereka mungkin melakukan banyak hal lebih cepat dan lebih baik daripada menggunakanwhile
danfor
.Ini adalah artikel yang bagus jika Anda ingin mempelajari lebih lanjut tentang fungsi-fungsi asinkron di atas array dalam JavaScript.
Baca lebih lanjut >> di sini :
sumber
Jika ada yang tertarik pada sisi kinerja beberapa mekanisme yang tersedia untuk iterasi Array, saya telah menyiapkan tes JSPerf berikut:
https://jsperf.com/fastest-array-iterator
Hasil:
for()
Iterator tradisional , sejauh ini merupakan metode tercepat, terutama ketika digunakan dengan panjang array yang di-cache .Metode
Array.prototype.forEach()
danArray.prototype.map()
adalah pendekatan paling lambat, mungkin sebagai konsekuensi dari panggilan fungsi overhead .sumber
i = i +1
daripadai++
Jika Anda menggunakan perpustakaan jQuery, pertimbangkan untuk menggunakan http://api.jquery.com/jQuery.each/
Dari dokumentasi:
sumber
Saya belum melihat variasi ini, yang secara pribadi saya sukai:
Diberikan array:
Anda dapat mengulanginya tanpa pernah mengakses properti panjang:
Lihat JsFiddle ini menunjukkan bahwa: http://jsfiddle.net/prvzk/
Ini hanya berfungsi untuk array yang tidak jarang. Artinya sebenarnya ada nilai di setiap indeks dalam array. Namun, saya menemukan bahwa dalam praktiknya saya jarang menggunakan array jarang dalam JavaScript ... Dalam kasus seperti itu, biasanya jauh lebih mudah untuk menggunakan objek sebagai peta / hashtable. Jika Anda memiliki array jarang, dan ingin mengulang lebih dari 0 .. panjang-1, Anda memerlukan untuk (var i = 0; i <someArray.length; ++ i) membangun, tetapi Anda masih memerlukan
if
di dalam loop untuk memeriksa apakah elemen pada indeks saat ini benar-benar ditentukan.Juga, seperti yang disebutkan oleh CMS dalam komentar di bawah, Anda hanya dapat menggunakan ini pada array yang tidak mengandung nilai-nilai palsu. Array string dari contoh berfungsi, tetapi jika Anda memiliki string kosong, atau angka 0 atau NaN, dll. Loop akan terputus sebelum waktunya. Sekali lagi dalam prakteknya ini hampir tidak pernah menjadi masalah bagi saya, tetapi ini adalah sesuatu yang perlu diingat, yang membuat ini menjadi loop untuk dipikirkan sebelum Anda menggunakannya ... Itu mungkin mendiskualifikasi untuk beberapa orang :)
Yang saya sukai dari loop ini adalah:
Alasan ini berfungsi adalah bahwa spesifikasi array mengamanatkan bahwa ketika Anda membaca item dari indeks> = panjang array, itu akan kembali tidak terdefinisi. Ketika Anda menulis ke lokasi seperti itu sebenarnya akan memperbarui panjangnya.
Bagi saya, konstruk ini paling mirip dengan sintaksis Java 5 yang saya sukai:
... dengan manfaat tambahan juga mengetahui tentang indeks saat ini di dalam loop
sumber
0
,false
,NaN
,null
atauundefined
, bahkan sebelumi
mencapai panjang, misalnya: jsfiddle.net/prvzk/1(item=someArray[i]) !== undefined
.Ada metode untuk beralih hanya pada properti objek sendiri, tidak termasuk yang prototipe:
tetapi masih akan beralih di atas properti yang ditentukan khusus.
Dalam JavaScript, properti kustom apa pun dapat ditetapkan ke objek apa pun, termasuk larik.
Jika seseorang ingin beralih pada array yang jarang,
for (var i = 0; i < array.length; i++) if (i in array)
atauarray.forEach
denganes5shim
harus digunakan.sumber
for (var i in array) if (++i)
?Ada beberapa cara untuk melakukannya dalam JavaScript. Dua contoh pertama adalah sampel JavaScript. Yang ketiga memanfaatkan perpustakaan JavaScript, yaitu, jQuery memanfaatkan
.each()
fungsi.sumber
for...in
harus dihindari untuk objek seperti ArrayCara paling elegan dan cepat
http://jsperf.com/native-loop-performance/8
Diedit (karena saya salah)
Membandingkan metode untuk pengulangan melalui array 100000 item dan melakukan operasi minimal dengan nilai baru setiap kali.
Persiapan:
Tes:
sumber
Pendekatan yang dioptimalkan adalah untuk cache panjang array dan menggunakan pola var tunggal menginisialisasi semua variabel dengan kata kunci var tunggal.
Jika urutan iterasi tidak masalah daripada Anda harus mencoba loop terbalik, ini paling cepat karena mengurangi pengujian kondisi overhead dan penurunan dalam satu pernyataan:
atau lebih baik dan lebih bersih untuk digunakan saat loop:
sumber
Dalam JavaScript, ada begitu banyak solusi untuk mengulang array.
Kode di bawah ini adalah yang populer
sumber
Jika Anda ingin menggunakan jQuery, ada contoh yang bagus dalam dokumentasinya:
sumber
Cara terbaik menurut saya adalah menggunakan fungsi Array.forEach. Jika Anda tidak dapat menggunakannya saya akan menyarankan untuk mendapatkan polyfill dari MDN. Untuk membuatnya tersedia, ini tentu saja merupakan cara teraman untuk beralih dari sebuah array dalam JavaScript.
Array.prototype.forEach ()
Jadi seperti yang disarankan orang lain, ini hampir selalu seperti yang Anda inginkan:
Ini memastikan bahwa apa pun yang Anda butuhkan dalam lingkup pemrosesan array tetap berada dalam lingkup itu, dan bahwa Anda hanya memproses nilai-nilai array, bukan properti objek dan anggota lainnya, yang merupakan apa yang
for ..
dilakukan.Menggunakan
for
loop gaya-C yang biasa berfungsi dalam banyak kasus. Penting untuk diingat bahwa segala sesuatu di dalam loop membagikan cakupannya dengan program Anda yang lain, {} tidak membuat lingkup baru.Karenanya:
akan menampilkan "11" - yang mungkin atau mungkin tidak seperti yang Anda inginkan.
Contoh jsFiddle yang berfungsi: https://jsfiddle.net/workingClassHacker/pxpv2dh5/7/
sumber
Ini tidak 100% identik, tetapi serupa:
sumber
Misalnya, saya digunakan di konsol Firefox:
sumber
Jauh lebih bersih ...
sumber
z.forEach(j => console.log(j));
.Jawaban singkat: ya. Anda dapat melakukannya dengan ini:
Di konsol browser, Anda dapat melihat sesuatu seperti "element1", "element2", dll., Dicetak.
sumber
Anda dapat menggunakan
Array.prototype.forEach(...)
:Atau
Array.prototype.map(...)
:Atau jquery atau untuk cara loop yang disebutkan sebelumnya.
sumber