什麼是迭代:
從乙個資料集合中按照一定的順序,不斷地取出資料的過程叫做迭代。
迭代和遍歷的區別:
迭代針對依次取出,不確定取出的資料是多少,不確定要去除的資料有多少,遍歷要知道資料集合的長度,不斷的全部取出資料。
什麼是迭代器:
對迭代過程的一種封裝,通常封裝為物件的資料形式,不同的語言中,表現出來的迭代形式也是不一樣的
迭代模式:
一種設計模式,用於統一迭代的過程,並且會規範代器的規格
迭代器滿足的條件:
1.迭代器有得到資料集合中下乙個資料的能力
2.判斷是否有後續資料的能力
//寫法規範
const obj =
}}
例子:
const arr =[1
,5,6
,8,23
,7,8
];const iterator =
this
.i++
;return result;}}
// 讓迭代器自己取出資料
let data = iterator.
next()
;while
(!data.done)
console.
log(
"迭代完成"
)
//建立乙個迭代器的函式
function
createiterator
(arr)
i++;return result;}}
}const iter1 =
createiterator
(arr1)
const iter2 =
createiterator
(arr2)
迭代器可以迭代陣列與類陣列
//陣列
const arr =[55
,52,44
,742,75
,1]// //物件具有屬性 symbol.iterator,則表示物件可以使用迭代
const iterator = arr[symbol.iterator]()
;//直接建立迭代物件
for(
let i =
0; i < arr.length;i ++
)//類陣列
const divs = document.
getelementsbytagname
("div");
console.
log(divs)
;let result = iterator.
next()
;while
(!result.done)
//for of 專門遍歷可迭代的物件
for(
let item of arr)
如果乙個物件中沒有symbol.iterator屬性,可以直接誒在物件中寫入這個屬性,也可以完成迭代。
const obj =
, done : i >= keys.length
}i++
;return result;}}
}}//擴充套件運算子可用作可迭代物件,迭代物件中的內容直接新增至陣列中
function
test
(a,b,c)
test
(...obj)
什麼是生成器:
生成器就是通過建構函式generator建立出來的乙個物件,這個物件即是迭代器,同時也是乙個可迭代的物件。
function
*test()
const generator =
test()
; generator.
next
()
使用next方法會返回乙個物件,這個物件就是乙個迭代器物件,物件中的value值就是yield後面跟的值.
注意點:
async和*不能同時加在乙個函式上,因為同時起函式修飾符的作用
生成器中的關鍵字yield 只能在函式內部使用,表示產生乙個迭代資料
每一次呼叫生成器的next方法,會將生成器函式執行帶yield關鍵字位置
生成器的返回值,出現在最後一次的done為ture的value中
呼叫生成器的next方法時,可以傳遞引數,這個引數是yield表示式的返回值。
第一次呼叫函式時,傳遞的引數是沒有任何含義的。
生成器和迭代器
可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...
迭代器和生成器
1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...
生成器和迭代器
1.iterator 迭代器 舉例 我們對list使用for for i in 1,2,3,4 print i 12 34對string物件使用for for ch in python print ch py thon對字典物件使用for for k in print k yx對檔案使用for fo...