Objek Iteratif JavaScript

Objek yang dapat diulir adalah objek yang dapat diulir (seperti array).

Objek yang dapat diulir dapat diakses dengan kode yang cepat dan efisien.

Objek yang dapat diulir dapat digunakan for..of Keluarkan mengulangi untuk mengulangi.

Keluarkan for..of

for..of Perintah digunakan untuk mengalir semula elemen objek yang dapat diulir.

Syarat

for (variable of iterable) {
  // blok kode yang akan dieksekusi
}

Iterasi

Iterasi mudah untuk memahami.

Ini hanya berarti mengalir semula sekumpulan elemen.

Di bawah ini adalah beberapa contoh sederhana:

  • Mengalir semula string
  • Mengalir semula array

Mengalir semula string

boleh digunakan for..of Mengalir semula elemen string:

实例

const name = "W3Schools";
for (const x of name) {
  // blok kode yang akan dieksekusi
}

亲自试一试

Mengalir semula array

boleh digunakan for..of Mengalir semula elemen array:

Contoh 1

const letters = ["a","b","c"];
for (const x of letters) {
  // blok kode yang akan dieksekusi
}

亲自试一试

Contoh 2

const numbers = [2,4,6,8];
for (const x of numbers) {
  // blok kode yang akan dieksekusi
}

亲自试一试

Mengalir semula Set

boleh digunakan for..of Mengalir semula elemen Set:

实例

const letters = new Set(["a","b","c"]);
for (const x of letters) {
  // blok kode yang akan dieksekusi
}

亲自试一试

Keterangan:Kami akan menjelaskan Set dan Map secara mendalam di bab berikutnya.

mengelilingi Map

boleh digunakan for..of mengelilingi elemen Map dalam lingkaran:

实例

const fruits = new Map([
  ["apples", 500],
  ["bananas", 300],
  ["oranges", 200]
});
for (const x of fruits) {
  // blok kode yang akan dieksekusi
}

亲自试一试

Iterator JavaScript

protokol iterator menentukan bagaimana menghasilkan nilai dari objek.satu siri nilai.

ketika objek melaksanakan next() ketika objek melaksanakan methoditerator.

next() method mesti mengembalikan objek yang mengandung 2 properti:

  • value (nilai berikutnya)
  • done (true atau false)
value

nilai yang dipulangkan iterator.

jika done adalah true, maka boleh diabaikan.

done

jika iterator telah selesai, maka true.

jika iterator menghasilkan nilai baru, maka false.

Perhatian:

Tekniknya, objek yang dapat diiterasi mesti melaksanakan method Symbol.iterator.

String, Array, TypedArray, Map dan Set adalah objek yang dapat diiterasi, kerana objek prototip mereka mempunyai method Symbol.iterator.

Objek yang dapat diiterasi yang disusun secara manual

Contoh yang ditunjukkan adalah objek yang dapat diiterasi yang disusun secara manual, ia akan berhenti, setiap kali dipanggil next() akan kembalikan 10, 20, 30, 40, ...:

实例

// Objek yang dapat diiterasi yang disusun secara manual
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 disusun secara manual tidak mendukung JavaScript for..of .

objek yang dapat diiterasi yang mendukung statement for..of

Objek yang dapat diiterasi JavaScript adalah yang mempunyai Symbol.iterator objek.

Symbol.iterator ialah satupun yang mengembalikan next() fungsi.

boleh digunakan kod berikut untuk mengiterasi objek yang dapat diiterasi:

for (const x of iterable) { }

实例

// 创建一个对象
myNumbers = {};
// 使其可迭代
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if (n == 100) { done = true; }
      return { value: n, done: done };
    }
  };
};
// 现在可以使用 for..of
for (const num of myNumbers) {
  // 任意代码
}

亲自试一试

Symbol.iterator 方法会被 for..of 自动调用。

但我们也可以手动调用它:

实例

let iterator = myNumbers[Symbol.iterator]();
while (true) {
  const result = iterator.next();
  if (result.done) break;
  // 任意代码
}

亲自试一试