ES6 17.迭代器和生成器
阿新 • • 發佈:2021-11-27
迭代器和生成器
要點:1.迭代器和生成器 2.預設迭代介面
一.迭代器和生成器
1.迭代器( Iterater ),用於給資料解構提供統一的訪問遍歷的機制
2.ES6之前的迭代器比較麻煩,現在引入生成器物件,讓迭代器更加容易
3.建立一個生成器方法,方法名前加上 * 號,迭代的內容之前使用 yield
// 生成器 function *cit(){ yield 1; yield 2; yield 3; }
ps: 1, 2, 3 是我們要遍歷的值,下面建立迭代器
4.迭代器物件的 .next()方法,類似指標,每次執行將下移一行
// 迭代器 let it =cit();// 每執行一次,next()將下移一行 console.log(it.next()); //{ value: 1, done: false } console.log(it.next()); //{ value: 2, done: false } console.log(it.next()); //{ value: 3, done: false } console.log(it.next()); //{ value: undefined, done: true }
ps:屬性value得到值,沒有返回undefined,當沒有值了,done則返回true
5.生成器結合迴圈語句,並且進行傳遞陣列進行迭代
function *cit(items){ for(let i=0;i<items.length;i++){ yield items[i] } } let it=cit([1,2,3,4,5]) console.log(it.next().value); //1 console.log(it.next().value); //2
ps:如果作為匿名函式使用:let cit =function *(items)
let cit =function *(items){ for(let i=0;i<items.length;i++){ yield items[i] } } let it=cit([1,2,3,4,5]) console.log(it.next().value); //1 console.log(it.next().value); //2
二、預設迭代介面
1.很多資料解構型別有預設迭代介面,比如:Array 、Map 、Set
2.對於原生就支援迭代器的資料解構,不用編寫生成器迭代器
3.最簡單的迭代方式,就是用 for ...of 迭代語句去遍歷即可
4.對於Array 陣列型別,它提供了關於三個方法:key() 、value() 和entries() ;
let items=[1,2,3,4,5]; // for(let i of items){ // console.log(i); // } console.log(items.keys()); //key, Object [Array Iterator] {} console.log(items.values()); //value, Object [Array Iterator] {} console.log(items.entries()); //key+value, Object [Array Iterator] {}
5.最簡單的迭代方法,就是使用for...of 迭代語句去遍歷即可
for(let i of items.keys()){ //下標 console.log(i); } //for...of遍歷得到value值 console.log('-------'); for(let i of items.values()){ //value值 console.log(i); } console.log('-------'); for(let i of items.entries()){ //值和下標 console.log(i); }
6.雖然for ...of特別方便,不過用 .next() 語法也支援
let values = items.values();
console.log(values.next());