===
*****=
*****=
*****=迭代器===
*****=
*****=
*****=
====
背景知識:
1. 什麼是迭代?
從乙個資料集合中按照一定的順序,不斷取出資料的過程
2. 迭代和遍歷的區別?
迭代強調的是依次取資料,並不保證取多少,也不保證把所有的資料取完
遍歷強調的是要把整個資料依次全部取出
3. 迭代器
對迭代過程的封裝,在不同語言中有不同的表現形式,通常為物件
4. 迭代模式
一種設計模式,用於同一迭代過程,並規範了迭代器規格:
迭代器應該具有得到下乙個資料的能力
迭代器應該具有判斷是否還有後續資料的能力
js中的迭代器
js規定,如果乙個物件具有next方法,並且 該方法返回乙個物件,該物件的格式如下:
例如:const obj =}}
則認為該物件是乙個迭代器
next
() 含義:
返回的物件:
value: 下乙個資料的值
done: boolean,是否迭代完成
例如: 陣列的迭代器:
// 迭代器建立函式
function
createiterator
(arr)
this
.i++
;return result;}}
return iterator;
}const arr =[1
,2,3
,4,5
];const result =
createiterator
(arr)
; 可迭代協議
es6規定,如果乙個物件具有知名符號屬性: symbol.iterator, 並且屬性值是乙個迭代器建立函式,
則該物件是可迭代的(iterator)
例如:const obj =}}
}}如何判斷乙個物件是否可以迭代: 通過原型上去找是否含有 [symbol.iterator] 知名符號屬性的方法
es6中陣列,已經做成了乙個可迭代的物件:
例如:const arr =[1
,2,3
,4,5
,6];
connst iterator = arr[symbol.iterator]()
; iterator.
next()
; 可以一直執行
dom中的許多類陣列也是乙個可迭代的物件:
如何遍歷迭代器:
const arr =[1
,2,3
,4,5
,6];
connst iterator = arr[symbol.iterator]()
;let result = iterator.
next()
;while
(!result.done)
es6 為了統一迭代方法: 提出了for
of 迴圈
forof 迴圈用於遍歷可迭代物件, 格式如下:
for(const item in iterable)
for(
const item of arr)
展開運算子與可迭代物件: 展開運算子可以作用與迭代物件,這樣,就可以輕鬆的將可迭代物件轉換為陣列
ES2015 迭代器模式 Iterator
設計模式 迭代器模式 迭代器設計模式 場景 你和我協同開發乙個任務清單應用 我的 const todolist 你的 for const item of todolist.life for const item of todolist.study 如果我需要在我的todolist 資料列表裡新增資料...
ES6的 迭代器
1,iterator 迭代器是es6提出的一種新的遍歷機制,目的是讓各種資料結構可方便地被訪問。可迭代物件由symbol.iterator實現,用symbol.iterator作為物件的屬性,鍵symbol.iterator的值是個函式,函式的執行返回乙個陣列的迭代器,可見 迭代器物件與symbol...
迭代器模式(Iterator)
迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。當你需要訪問乙個聚合物件,而且不管這些物件是什麼都需要遍歷的時候,就應該考慮使用迭代器模式。另外,當需要對聚集有多種方式遍歷時,可以考慮去使用迭代器模式。迭代器模式為遍歷不同的聚集結構提供如開始 ...