在 j**ascript 中,有三種型別的迭代器:
陣列迭代器:通過遍歷陣列來訪問其元素。 字串迭代器:通過遍歷字串來訪問其字元。 對映迭代器和設定迭代器:訪問對映的鍵和值,並通過遍歷它們來設定資料結構。 此外,在 ES6 中,我們還可以使用自定義迭代器來迭代物件中的元素。 我們可以使用符號Iterator 方法,用於建立自定義迭代器,該迭代器使用 Next 方法返回 Iterator 物件。
另外generator
函式可以被認為是一種特殊的迭代器,它可以暫停和恢復執行,允許我們通過控制迭代器的執行來生成序列。
陣列迭代器是 j**ascript 陣列的迭代器,可以訪問array.prototype[symbol.iterator]()
方法獲取。
一旦我們有了陣列迭代器,我們就可以使用以下迭代方法:
next()
:返回乙個物件,該物件具有 value 和 done 屬性,value 表示下乙個元素,done 表示迭代結束。 return()
:用於提前終止迭代,並返回給定值。 throw()
:用於在迭代器中丟擲異常。 下面是使用迭代器的示例
const arr = ['a', 'b', 'c'];const iterator = arr[symbol.iterator]()console.log(iterator.next())// console.log(iterator.next())// console.log(iterator.next())// console.log(iterator.next())//除了上述迭代方法外,您還可以使用 for...。of 語句來使用迭代器,如下所示:
const arr = ['a', 'b', 'c'];for (const item of arr) // output:// a// b// c此外,除了上述迭代方法外,陣列迭代器還可以使用常見的陣列方法,如 foreach()、map()、filter() 和 reduce() 進行迭代操作。
string iterator
是 ES6 引入的迭代器,可用於遍歷字串。 字串迭代器沒有自己的迭代方法,但它們可以使用泛型迭代方法。 以下是 String Iterator 可以使用的迭代方法:
next()
:以 格式返回迭代器的下乙個值。
symbol.iterator
:返回乙個迭代器物件,該物件可用於...。of 迴圈遍歷字串。
示例如下:
const str = "hello";const striterator = str[symbol.iterator]()console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// for (let char of str) // output:// h// e// l// l// oMap Iterator 和 Set Iterator 都具有以下迭代方法:
next()
:返回迭代器中的下乙個元素並包含兩個屬性(value 和 done)的物件。 value 屬性是當前元素的值,done 屬性指示迭代器是否已完全迭代。
symbol.iterator
:返回迭代器本身,以便它可以用於...。回收利用。
Map Iterator 還具有以下方法:
entries()
:返回乙個新的迭代器物件,其元素是 [key, value] 的陣列。
keys()
:返回乙個新的迭代器物件,其元素是對映中的鍵名。
values()
:返回乙個新的迭代器物件,其元素是對映中的鍵值。
設定迭代器還具有以下方法:
entries()
:返回乙個新的迭代器物件,其元素是 [value, value] 的陣列。
keys()
:返回乙個新的迭代器物件,其元素是集合中的值。
values()
:返回乙個新的迭代器物件,其元素是集合中的值。
如何使用地圖迭代器的示例
const mymap = new map();mymap.set("key1", "value1");mymap.set("key2", "value2");mymap.set("key3", "value3");const mapiterator = mymap.entries();console.log(mapiterator.next().value); // ["key1", "value1"]console.log(mapiterator.next().value); // ["key2", "value2"]console.log(mapiterator.next().value); // ["key3", "value3"]console.log(mapiterator.next().value); // undefined設定迭代器的使用示例
const myset = new set(['apple', 'banana', 'orange']);用於....的迴圈遍歷 setfor(myset 的 const 項)手動遍歷 setconst setiterator = mysetvalues();let next = setiterator.next();while (!next.done)