迭代器 Iterator簡介與用法

2021-09-10 21:47:59 字數 2261 閱讀 8906

一、概述

1、一種介面,為各種不同的資料結構提供統一的訪問機制。任何資料結構只要部署iterator介面,就可以完成遍歷操作

2、呼叫指標物件的next方法,就可以遍歷事先給定的資料結構

3、每一次呼叫next方法,都會返回資料結構的當前成員的資訊。具體來說,就是返回乙個包含value和done兩個屬性的物件。其中,value屬性是當前成員的值,done屬性是乙個布林值,表示遍歷是否結束。

4、凡是部署了symbol.iterator屬性的資料結構,就稱為部署了遍歷器介面。呼叫這個介面,就會返回乙個遍歷器物件。

二、資料結構的預設iterator介面

1、物件的symbol.iterator屬性,指向該物件的預設遍歷器方法。

2、具備iterator介面的原生資料結構:

陣列某些類似陣列的物件

set和map結構。

3、其他資料結構(主要是物件)的iterator介面,都需要自己在symbol.iterator屬性上面部署,這樣才會被for…of迴圈遍歷

4、嚴格地說,物件部署遍歷器介面並不是很必要,因為這時物件實際上被當作map結構使用

5、對一般物件部署迭代器物件:

複製**

/***

//迭代器物件

const soul_iterator=,

next():;

},soul_exchange()

// console.log(array);

return array;}};

//測試物件

function objtest(){}

objtest.prototype=;

//部署迭代器物件

objtest.prototype.proto=soul_iterator;

//建立測試物件的例項

var newobj=new objtest();

// for…of 測試

for(let i of newobj)

//next()方法測試

// console.log(newobj.next());

// console.log(newobj.next());

// console.log(newobj.next());

// console.log(newobj.next());

複製**

6、對於類似陣列的物件(存在數值鍵名和length屬性),部署iterator介面,有乙個簡便方法,就是symbol.iterator方法直接引用陣列的iterator介面

nodelist.prototype[symbol.iterator] = array.prototype[symbol.iterator];

7、如果symbol.iterator方法對應的不是遍歷器生成函式(即會返回乙個遍歷器物件),解釋引擎將會報錯

三、呼叫iterator介面的場合

1、預設呼叫iterator介面的情況:

解構賦值

擴充套件運算子 //只要某個資料結構部署了iterator介面,就可以對它使用擴充套件運算子,將其轉為陣列

yield* //yield*後面跟的是乙個可遍歷的結構,它會呼叫該結構的遍歷器介面

for…of

array.from()

map(), set(), weakmap(), weakset()(比如new map([[『a』,1],[『b』,2]]))

promise.all()

promise.race()

四、字串的iterator介面

1、字串是乙個類似陣列的物件,也原生具有iterator介面。

五、iterator介面和generator函式

1、generator可以很容易的實現iterator介面

2、實現方式:

複製**

var myiterable = {};

myiterable[symbol.iterator] = function* () ;

複製**

3、yield命令給出每一步的返回值。

六、iterator物件的return()和throw()

1、next方法是必須部署的,return方法和throw方法是否部署是可選的

2、return方法必須返回乙個物件

3、return方法主要用於提前退出

4、throw方法主要是配合generator函式使用,一般的遍歷器物件用不到這個方法

七、for…of

1、凡是部署了iterator物件的物件,都可以使用for…of取得值

iterator迭代器怎麼用

迭代器 iterator 有時又稱游標,它是一種物件,能夠用來遍歷容器中的元素,每個迭代器物件代表容器中的確定的位址。我一般在遍歷集合的時候使用迭代器,呼叫iterator 方法會返回集合的迭代器,剛獲得迭代器的時候,迭代器的游標指向第乙個元素的前面,通過hasnext 可以判斷游標的後面還有沒有元...

Vector容器與iterator迭代器

首先,回顧一下 的用法 是運算子中等級最高的,它分為三種 1 global scope 全域性作用域符 用法 name 2 class scope 類作用域符 用法 class name 3 namespace scope 命名空間 作用域符 用法 namespace name 他們都是左關聯 le...

迭代器模式(Iterator)

迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。當你需要訪問乙個聚合物件,而且不管這些物件是什麼都需要遍歷的時候,就應該考慮使用迭代器模式。另外,當需要對聚集有多種方式遍歷時,可以考慮去使用迭代器模式。迭代器模式為遍歷不同的聚集結構提供如開始 ...