ES6对于特殊的对象的遍历(iterator)

简介

我们在处理数据的时候很多时候会遇到一些比较麻烦的数据,例如下面这样的一个例子

let NBA = {
    Team:{
        LAC:[
            'Lebron James','Anthony Davis','Dwight Howard'
        ],
        Bulls:[
            'Michael Jordan','derrick rose','Jimmy Butler'
        ],
        Celts:[
            'kevin garnett','Rajen langdo','Paul Pierce'
        ]
    }
}

是不是挺熟悉的,然后我想要把里面球队队员的名字都拿出来,统一放到一个数组里面去,要怎么做呢,之前我在我上一篇文章里面提到了一个for…of…的遍历方法,可以遍历出对象里面的的value值,那么这个咋整

如果用土方法不怕麻烦的话,可以这样

for (const key in NBA) {
    let name = []
    for (const item in NBA[key]) {
        name = name.concat(NBA[key][item])
    }
    console.log(name)
}   

在这里插入图片描述
得到的也就是所有的名字的结果,可是如果我不想这样,我想要直接使用for…of…直接一步到位,那么可不可以做到呢

for (const item of NBA) {
    console.log(item);
}

这里就说一个今天要说的东西,就是iterator,它的中文名字,就是选代器的意思

这是一个ES6里面新的一个方法,那么它要怎么用呢,直接上代码

NBA[Symbol.iterator] = function() { 
    //这是一个API的接口 
    //接口的入口数据是通过this来传递
    //输出的出口是通过return来进行
    let Team = this.Team
    let keys = Reflect.ownKeys(Team)
    let name = []
    return {
        //这个是iterator接口规定的格式
        next(){
            if(!name.length ){
                name = Team[keys[0]] //从第一支球队的第一个名字开始遍历
                keys.shift() //每次遍历完一个,删掉一个
            }
            return {
                done:!name.length, //遍历是否结束,false没结束,true结束
                value:name.shift() //当前被遍历到的值
            }
        }
    }
}
for (const item of NBA) {
    console.log(item);
}

这个时候我们就可以直接打印结果
在这里插入图片描述
所以,如果以后遇到这样的情况,只需要封装起来这个方法,就可以直接遍历了,是不是很方便嘞!

而且它适用于非常复杂的对象遍历的时候,比如说在NBA的对象里面还有一个总经理的对象的时候,第一种方法就不适用了

这个我也是刚学到的,哈哈哈哈哈,这方法贼牛逼我觉得

如果觉得这篇文章对你有所帮助,求点个赞~~!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值