简介
我们在处理数据的时候很多时候会遇到一些比较麻烦的数据,例如下面这样的一个例子
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的对象里面还有一个总经理的对象的时候,第一种方法就不适用了
这个我也是刚学到的,哈哈哈哈哈,这方法贼牛逼我觉得
如果觉得这篇文章对你有所帮助,求点个赞~~!!!