ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

es6——iterator迭代器

2022-08-26 20:34:31  阅读:195  来源: 互联网

标签:es6 console iterator 迭代 value next done log


iterator的说明

1 es6创建了一种新的迭代器
2 for of 可以遍历使用迭代器
3 Array Arguments Set Map String TypeArray NodeList 都支持
4 iterator是对象的一个symbol类型的属性
 1 const arr = ['o', 'r', 'e', 'a'];
 2 
 3 // 不同于for in 的是 for in i 是下标、键 for of 是值
 4 for (let i of arr) {
 5     console.log(i); // o r e a
 6 }
 7 
 8 // 对象的Symbol.iterator属性是一个函数,返回值是一个对象,该对象中有一个next方法
 9 // arr也是一个对象
10 let iterator = arr[Symbol.iterator]();
11 console.log(iterator); // Object [Array Iterator] {}
12 // iterator中有一个next方法,每调用一次,next指针的返回值是数据结构的下一位节点对象,第一次调用就是节点对象
13 console.log(iterator.next()); // { value: 'o', done: false }
14 console.log(iterator.next()); // { value: 'r', done: false }
15 console.log(iterator.next()); // { value: 'e', done: false }
16 console.log(iterator.next()); // { value: 'a', done: false }

自定义迭代器iterator

 1 let arr = ["zhangsan", "lisi", "wangwu", "zhaoliu"];
 2 arr[Symbol.iterator] = function() {
 3     let index = 0;
 4     let lock = false;
 5     return {
 6         next: () => {
 7             if (index < this.length && !lock) {
 8                 index++;
 9                 return { value: `自定义${this[index-1]}`, done: lock };
10             } else {
11                 lock = true;
12                 // done为true时,for of停止遍历
13                 return { value: undefined, done: lock };
14             }
15         },
16     };
17 };
18 for (let i of arr) {
19     console.log(i); // 自定义zhangsan 自定义lisi 自定义wangwu 自定义zhaoliu
20 }
21 
22 const iterator = arr[Symbol.iterator]();
23 console.log(iterator.next()); // { value: '自定义zhangsan', done: false }
24 console.log(iterator.next()); // { value: '自定义lisi', done: false }
25 console.log(iterator.next()); // { value: '自定义wangwu', done: false }
26 console.log(iterator.next()); // { value: '自定义zhaoliu', done: false }
27 console.log(iterator.next()); // { value: undefined, done: true }
28 console.log(iterator.next()); // { value: undefined, done: true }

 

标签:es6,console,iterator,迭代,value,next,done,log
来源: https://www.cnblogs.com/lzx-cm/p/16629060.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有