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());

  

posted @ 2021-11-27 11:35  翟莹萍  阅读(26)  评论(0编辑  收藏  举报