首页 > 其他分享 >es6——iterator迭代器

es6——iterator迭代器

时间:2022-08-26 20:24:25浏览次数:45  
标签: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
From: https://www.cnblogs.com/lzx-cm/p/16629060.html

相关文章

  • es6——js第7种数据类型symbol和es10新增属性description
    文章结构创建symbol的方式获取symbol的描述信息注意事项不能与其他数据类型进行运算值是唯一的?分情况!不能用for-in遍历......
  • Python基础——迭代器 生成器
    迭代器iterator迭代简单理解就是重复,但是每次重复产生的结果还要作为下次重复的初始值。可迭代对象:含有——iter——方法的对象。可以用for...in..遍历的都是可迭代对......
  • 正确的策略迭代流程是什么?
    当前已经有了一版线上用户正在使用的方案,然后算法对某些策略做了模型迭代或者规则优化(反映在cxr或者更好的用户体验)产生了一版新的方案,新方案的上线流程是怎样的?方式一:新......
  • es6的模块化
    es6的模块化import导入export导出es6的写法<scripttype='module'></script>一个内容如果需要导入必须先导出第一种写法export导出//对象constobj={u......
  • ES6
    文件的导入导出exportdefault和export导出,import导入。补充:还有两个相似的:module.exports和exports(exports=module.exports)导出,require()导入与之区别是......
  • es6 findIndex,find用法
    letarr=[{name:'test1',age:1},{name:'test2',age:2},{name:'test3',age:3}]lettemp=arr.findIndex(function(item){console.log(item.name......
  • ES678新特性
    ECMAScript介绍ECMA:欧洲计算机制造商协会(EuropeanComputerManufacturersAssociation)。ECMAScript:由ECMA国标制定的脚本程序设计语言ES6新特性let关键字:变量声明......
  • 关于 map 的迭代器
     今天遇到一个问题CountCompileResult(constLIST_MAP&rfLmCompileWafers){    for(autoitr=rfLmCompileWafers.begin();itr!=rfLmCompileWafers.e......
  • for循环与Iterator处理相关问题
    如下:for循环里面不要进行remove操作,for循环里remove元素后,list的下标会减小,导致遍历不完全。使用Iterator循环进行remove    end......
  • 技术分享| anyRTC 8月更新迭代
    anyRTC8月更新迭代,新增视频水印功能,有效保护企业版权;此外还添加了抓拍图片功能;同时对音视频模块,实时消息模块等多项功能进行了优化改进。SDK新增1、新增视频水印功能为......