JS有哪些迭代器? 它是如何工作的?

Mondo 科技 更新 2024-02-15

在 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// o
Map 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)

相關問題答案

    使用煙道冷凝器有什麼好處?

    使用煙道冷凝器有以下好處 .能源 煙道冷凝器能夠有效地 煙氣中的廢熱,這些廢熱通常在排放過程中被浪費掉。這些熱量可用於預熱鍋爐給水 加熱過程或產生蒸汽,從而提高能源效率 降低運營成本並減少對化石燃料等一次能源的依賴。.提高熱效率 通過冷凝煙氣中的水蒸氣,降低煙氣溫度,有助於提高鍋爐或其他熱力裝置的熱...

    卵巢早衰的症狀是什麼?我該如何預防?

    人人享有健康 說 卵巢功能過早衰,也稱為卵巢功能減退,是指女性的卵巢功能在 歲之前開始下降或完全消失。這種疾病在現代城市女性中很常見,對她們的健康和生活質量構成巨大威脅。卵巢早衰的症狀多種多樣,因此及早發現和干預很重要。一般來說,卵巢早衰的主要症狀包括月經失調 不孕 乾燥 減退 性功能障礙 情緒波動...

    軍校優勢專業有哪些?如何選擇專業?

    當然,近幾年也逐步改革,將指揮與非指揮專業合併為指揮與技術融合專業,但指揮與技術融合專業在大三時也會分為指揮與非指揮專業。非指揮專業包括一些技術專業,如電腦科學 電氣工程 通訊工程 機械工程.如果你想去軍隊學習一些技術,如果分數夠了,你會更喜歡非指揮專業,以後參加考試 保證 的機會會更大,體能訓練也...

    固定IP位址的優點是什麼?我如何獲得它?

    隨著網路技術的不斷發展,越來越多的人開始使用動態IP上網。但是,對於某些特定的 Web 應用程式,需要固定的 IP 位址。本文將介紹固定 IP 位址的概念 它的好處以及如何獲得乙個。.固定IP位址的概念。固定 IP 位址是分配給網路中的計算機或裝置的唯一且不變的 IP 位址。與動態 IP 位址不同,...

    使用洗眼器時需要注意哪些問題?

    洗眼器是安全勞動保護的必備裝置,當工人的眼睛意外受傷時,可以盡快使用洗眼器沖洗乾淨!那麼,使用洗眼器時需要注意哪些問題呢?下面就來看看洗眼器廠家為大家做的介紹吧!沖洗身體其他部位時,用手拉動閥門的槓桿,水會自動從噴頭噴出,使用後必須將槓桿向上復位 不要用力過猛開啟和關閉球閥,只需輕輕轉動即可,不要擰...