当前位置: 首页 > article >正文

ES6基础----iterator接口的使用

   iterator一个统一规范接口,作用是为了给复杂的数据提供一个统一遍历的方法。

1、所有实现[Symbol.iterator]属性的数据都可以使用for...of进行遍历

//         const arr=["内容1","内容2","内容3"]//----有 Symbols 属性及可以进行 iterator 遍历

//         console.log(arr)

2、进行 Sysbols 遍历

//         let arr02=arr[Symbol.iterator]();

//         console.log(arr02.next())//{value: '内容1', done: false}   --- 值  是否后面没有值(返回 false / true)

//         console.log(arr02.next())//{value: '内容2', done: false}

//         console.log(arr02.next())//{value: '内容3', done: false}

//         console.log(arr02.next())//{value: undefined, done: true}


 

       

3、如果一个数据结构想要使用for...of循环   ---对象中想用遍历

但是自身没有[Symbol.iterator]属性 ,就可以进行添加[Symbol.iterator],实现for...of循环

    //对象中有数组

        const obj={

            arr:[1,2,3],

            [Symbol.iterator](){

                let index=0

                return{

                    next:function(){

                        return index<obj.arr.length

                        ?{value:obj.arr[index++],done:false}

                        :{value:undefined,done:true}

                    }

                }

            }

        }

        let obj2=obj[Symbol.iterator]()

        console.log(obj2.next())//{value: 1, done: false}

        console.log(obj2.next())//{value: 2, done: false}

        console.log(obj2.next())//{value: 3, done: false}

        console.log(obj2.next())//{value: undefined, done: true}

        for(let a of obj){

            console.log(a)//1  2  3

        }


 

  //对象中纯对象

         const obj3={

             name:"张三",

            age:20,

            address:"昆明市",

            [Symbol.iterator](){

                let index=Object.keys(obj3);

                //Object.keys得到所有的key,但是是一个数组

               //['name', 'age', 'address']

                 let nextindex=0

                 return{

                    next:function(){

                        return{value:obj3[index[nextindex++]],

                            done:nextindex>index.length}

                    }

                }

             }

         }

        let obj4=obj3[Symbol.iterator]()

        console.log(obj4.next())//

         console.log(obj4.next())

         console.log(obj4.next())

         console.log(obj4.next())


http://www.kler.cn/a/283921.html

相关文章:

  • 什么时候需要复写hashcode()和compartTo方法
  • POI实现根据PPTX模板渲染PPT
  • 【学习】【HTML】HTML、XML、XHTML
  • 【LeetCode】【算法】55. 跳跃游戏
  • 深入理解接口测试:实用指南与最佳实践5.0(二)
  • 【AI换装整合包及教程】CatVTON与其他虚拟试衣技术的详细对比
  • 【Android】UI拓展之滑动菜单、悬浮按钮、CoordinatorLayout布局等
  • 分布式计算架构详解以及任务调度方式
  • python用波形显示udp数据实现一个模拟示波器
  • Leetcode3240. 最少翻转次数使二进制矩阵回文 II
  • ES常用多条件查询
  • 西方法律思想史考试复习材料
  • 每天一个数据分析题(五百一十一)- 神经网络
  • 技术风暴中的应急策略:开发团队如何应对突发故障与危机
  • Java笔试面试题AI答之面向对象(9)
  • 自己开发完整项目一、登录注册功能-01
  • 集合及数据结构第十三节(下)———— 枚举与Lambda表达式
  • MES基于C#开发计划管理组件集成WinCC中使用
  • Java框架SpringBoot(一)
  • 【ceph学习】rados bench性能测试工具介绍
  • JAVA中有关锁的详解
  • 鸿蒙HarmonyOS开发:创建新的Lite工程
  • cesium加载在线3dtiles
  • 腾讯地图SDK Android版开发 9 覆盖物示例3点聚合
  • Flink1.14.* 各种算子在StreamTask控制下如何调用的源码
  • FPGA实现SDI视频H265压缩网络推流输出,基于VCU架构,支持12G-SDI 4K60帧,提供工程源码和技术支持