Objek yang Dapat Diiterasi JavaScript
Objek yang dapat dilewati adalah objek yang dapat dilewati (seperti array).
Objek yang dapat dilewati dapat diakses dengan kode yang sederhana dan efisien.
Objek yang dapat dilewati dapat digunakan for..of
Perulangan melakukan iterasi.
Perulangan for..of
for..of
pernyataan digunakan untuk melintasi elemen objek yang dapat dilewati.
Sintaks
for (variable of iterable) { // blok kode yang akan dijalankan }
Iterasi
Iterasi mudah untuk memahami.
Artinya hanya melintasi sekumpulan elemen.
Berikut adalah beberapa contoh sederhana:
- Melintasi string
- Melintasi array
Melintasi string
dapat digunakan untuk for..of
Melintasi elemen string:
Contoh
const name = "W3Schools"; for (const x of name) { // blok kode yang akan dijalankan }
Melintasi array
dapat digunakan untuk for..of
Melintasi elemen array:
Contoh 1
const letters = ["a","b","c"]; for (const x of letters) { // blok kode yang akan dijalankan }
Contoh 2
const numbers = [2,4,6,8]; for (const x of numbers) { // blok kode yang akan dijalankan }
Melintasi Set
dapat digunakan untuk for..of
Melintasi elemen Set:
Contoh
const letters = new Set(["a","b","c"]); for (const x of letters) { // blok kode yang akan dijalankan }
Keterangan:kami akan menjelaskan lebih lanjut tentang Set dan Map di bab berikutnya.
melintasi Map
dapat digunakan untuk for..of
melintasi elemen Map dengan putar:
Contoh
const fruits = new Map([ ["apples", 500], ["bananas", 300], ["oranges", 200] }); for (const x of fruits) { // blok kode yang akan dijalankan }
iterator JavaScript
protokol iterator mendefinisikan bagaimana menghasilkansatu rangkaian nilai.
ketika objek melaksanakan next()
ketika objek melaksanakan metodeiterator.
next()
metode harus mengembalikan objek yang mengandung 2 atribut:
- value (nilai berikutnya)
- done (true atau false)
value |
nilai yang dikembalikan iterator. jika done adalah true, maka dapat disingkirkan. |
done |
jika iterator selesai, maka true. jika iterator menciptakan nilai baru, maka false. |
Perhatian:
Tekniknya, objek yang dapat diiterasi harus melaksanakan metode Symbol.iterator.
string, array, TypedArray, Map dan Set adalah objek yang dapat diiterasi, karena prototipe objek mereka memiliki metode Symbol.iterator.
objek yang dapat diiterasi yang dibuat sendiri
Contoh menunjukkan objek yang dapat diiterasi yang dibuat sendiri, yang akan selalu berakhir, setiap pemanggilan next()
semua akan kembalikan 10, 20, 30, 40, ...:
Contoh
// Membuat objek yang dapat diiterasi sendiri function myNumbers() { let n = 0; return { next: function() { n += 10; return { value: n, done: false }; } }; } // Membuat objek yang dapat diiterasi const n = myNumbers(); n.next(); // kembalikan 10 n.next(); // kembalikan 20 n.next(); // kembalikan 30
Masalahnya adalah:
Objek yang dapat diiterasi yang dibuat sendiri tidak mendukung JavaScript for..of
.
yang mendukung kalimat for..of
Objek yang dapat diiterasi JavaScript memiliki Symbol.iterator objek.
Symbol.iterator adalah yang mengembalikan next()
fungsi.
dapat digunakan kode berikut untuk mengiterasi objek yang dapat diiterasi:
for (const x of iterable}) { }
Contoh
// Membuat sebuah objek myNumbers = {}; // Membuatnya dapat diiterasi myNumbers[Symbol.iterator] = function() { let n = 0; done = false; return { next() { n += 10; if (n == 100) { done = true; } return { value: n, done: done }; } }; }; // Sekarang dapat menggunakan for..of for (const num of myNumbers) { // Kode Apa Saja }
Metode Symbol.iterator akan for..of
Panggil Otomatis
Tapi kami juga dapat memanggilnya secara manual:
Contoh
let iterator = myNumbers[Symbol.iterator](); while (true) { const result = iterator.next(); if (result.done) break; // Kode Apa Saja }