Saya memiliki objek dalam JavaScript:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
Saya ingin menggunakan for
loop untuk mendapatkan propertinya. Dan saya ingin mengulanginya di bagian-bagian (tidak semua properti objek sekaligus).
Dengan array sederhana saya bisa melakukannya dengan for
loop standar :
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
Tetapi bagaimana melakukannya dengan benda?
Jawaban:
Untuk sebagian besar objek, gunakan
for .. in
:Dengan ES6, jika Anda membutuhkan kedua kunci dan nilai secara bersamaan, lakukan
Untuk menghindari logging properti yang diwarisi, tanyakan dengan hasOwnProperty :
Anda tidak perlu memeriksa
hasOwnProperty
saat iterasi tombol-tombol jika Anda menggunakan objek sederhana (misalnya objek yang Anda buat sendiri{}
).Dokumentasi MDN ini menjelaskan secara lebih umum bagaimana menangani objek dan propertinya.
Jika Anda ingin melakukannya "dalam potongan", yang terbaik adalah mengekstrak kunci dalam sebuah array. Karena pesanan tidak dijamin, ini adalah cara yang tepat. Di browser modern, Anda dapat menggunakan
Agar lebih kompatibel, Anda sebaiknya melakukan ini:
Kemudian Anda dapat mengulangi properti Anda dengan indeks
yourobject[keys[i]]
::sumber
keys
dari kode yang diberikan harus cukup.Berikut ini adalah solusi iterasi untuk peramban modern:
Atau tanpa fungsi filter:
Namun Anda harus mempertimbangkan bahwa properti dalam objek JavaScript tidak diurutkan, yaitu tidak memiliki urutan.
sumber
Menggunakan
Object.entries
Anda melakukan sesuatu seperti ini.Metode Object.entries () mengembalikan array properti enumerable milik objek tertentu [kunci, nilai]
Jadi Anda dapat beralih di atas Obyek dan memiliki
key
danvalue
untuk masing-masing objek dan mendapatkan sesuatu seperti ini.atau seperti ini
Untuk referensi, lihat dokumen MDN untuk Entri Objek
sumber
Dengan fitur ES6 / ES2015 yang baru, Anda tidak perlu lagi menggunakan objek untuk beralih pada hash. Anda bisa menggunakan Peta . Javascript Maps menyimpan kunci dalam urutan penyisipan, artinya Anda dapat mengulanginya tanpa harus memeriksa hasOwnProperty, yang selalu benar-benar merupakan peretasan.
Iterate di atas peta:
atau gunakan forEach:
sumber
Jika Anda ingin kunci dan nilai saat iterasi, Anda bisa menggunakan for ... of loop dengan Object.entries .
sumber
Satu-satunya cara yang dapat diandalkan untuk melakukan ini adalah menyimpan data objek Anda ke 2 array, satu kunci, dan satu untuk data:
Anda kemudian dapat mengulangi susunan seperti biasanya:
Saya tidak menggunakan
Object.keys(obj)
, karena itulah IE 9+.sumber
-> jika kita beralih pada objek JavaScript menggunakan dan menemukan kunci array objek
sumber
Jika Anda ingin mengulang seluruh objek sekaligus, Anda bisa menggunakan
for in
loop:Tetapi jika Anda ingin membagi objek menjadi beberapa bagian sebenarnya Anda tidak bisa. Tidak ada jaminan bahwa properti di objek berada dalam urutan tertentu. Karena itu, saya dapat memikirkan dua solusi.
Pertama-tama adalah "menghapus" properti yang sudah dibaca:
Solusi lain yang dapat saya pikirkan adalah dengan menggunakan Array of Arays alih-alih objek:
Kemudian,
for
loop standar akan berfungsi.sumber
Saya akhirnya datang dengan fungsi utilitas praktis dengan antarmuka terpadu untuk beralih Objek, Strings, Array, TypedArrays, Maps, Sets, (any Iterables).
https://github.com/alrik/iterate-javascript
sumber
Anda dapat mencoba menggunakan lodash- Pustaka utilitas JavaScript modern yang menghadirkan modularitas, kinerja & ekstra untuk mempercepat objek:
sumber
Untuk iterasi objek biasanya kita menggunakan
for..in
loop. Struktur ini akan berulang melalui semua properti enumerable , termasuk yang diwariskan melalui pewarisan prototypal. Sebagai contoh:Namun,
for..in
akan mengulang semua elemen yang dapat dihitung dan ini tidak akan dapat memisahkan iterasi menjadi potongan. Untuk mencapai ini, kita dapat menggunakanObject.keys()
fungsi bawaan untuk mengambil semua kunci dari suatu objek dalam array. Kami kemudian dapat membagi iterasi menjadi beberapa untuk loop dan mengakses properti menggunakan array kunci. Sebagai contoh:sumber
sumber
Object
s tidak berurutan. Mereka tidak.If you can make sense of the sentence it worked
hanya berfungsi karena detail implementasi. Tidak dijamin untuk bekerja sama sekali. Anda juga tidak seharusnya TitleCase fungsi & variabel Anda. Itu untukclass
es.Benar-benar PITA ini bukan bagian dari Javascript standar.
Catatan: Saya mengalihkan parameter panggilan balik ke (nilai, kunci) dan menambahkan objek ketiga untuk membuat API konsisten dengan API lainnya.
Gunakan seperti ini
sumber
this
apa pun yang Anda suka untuk panggilan balik, karena panggilan balik itu memiliki konteksnya sendiri.objectForEach
fungsi sebenarnya . Maaf kalau itu membingungkan.Iya. Anda bisa mengulang melalui objek menggunakan untuk loop. Berikut ini sebuah contoh
CATATAN: contoh yang disebutkan di atas hanya akan berfungsi di IE9 +. Lihat dukungan browser Objec.keys di sini .
sumber
Coba online
sumber