1. 程式人生 > 其它 >ES6 17.迭代器和生成器

ES6 17.迭代器和生成器

迭代器和生成器

要點: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());