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