ES6对于特殊的对象的遍历(iterator)
簡(jiǎn)介
我們?cè)谔幚頂?shù)據(jù)的時(shí)候很多時(shí)候會(huì)遇到一些比較麻煩的數(shù)據(jù),例如下面這樣的一個(gè)例子
let NBA = {Team:{LAC:['Lebron James','Anthony Davis','Dwight Howard'],Bulls:['Michael Jordan','derrick rose','Jimmy Butler'],Celts:['kevin garnett','Rajen langdo','Paul Pierce']} }是不是挺熟悉的,然后我想要把里面球隊(duì)隊(duì)員的名字都拿出來,統(tǒng)一放到一個(gè)數(shù)組里面去,要怎么做呢,之前我在我上一篇文章里面提到了一個(gè)for…of…的遍歷方法,可以遍歷出對(duì)象里面的的value值,那么這個(gè)咋整
如果用土方法不怕麻煩的話,可以這樣
for (const key in NBA) {let name = []for (const item in NBA[key]) {name = name.concat(NBA[key][item])}console.log(name) }
得到的也就是所有的名字的結(jié)果,可是如果我不想這樣,我想要直接使用for…of…直接一步到位,那么可不可以做到呢
這里就說一個(gè)今天要說的東西,就是iterator,它的中文名字,就是選代器的意思
這是一個(gè)ES6里面新的一個(gè)方法,那么它要怎么用呢,直接上代碼
NBA[Symbol.iterator] = function() { //這是一個(gè)API的接口 //接口的入口數(shù)據(jù)是通過this來傳遞//輸出的出口是通過return來進(jìn)行let Team = this.Teamlet keys = Reflect.ownKeys(Team)let name = []return {//這個(gè)是iterator接口規(guī)定的格式next(){if(!name.length ){name = Team[keys[0]] //從第一支球隊(duì)的第一個(gè)名字開始遍歷keys.shift() //每次遍歷完一個(gè),刪掉一個(gè)}return {done:!name.length, //遍歷是否結(jié)束,false沒結(jié)束,true結(jié)束value:name.shift() //當(dāng)前被遍歷到的值}}} } for (const item of NBA) {console.log(item); }這個(gè)時(shí)候我們就可以直接打印結(jié)果
所以,如果以后遇到這樣的情況,只需要封裝起來這個(gè)方法,就可以直接遍歷了,是不是很方便嘞!
而且它適用于非常復(fù)雜的對(duì)象遍歷的時(shí)候,比如說在NBA的對(duì)象里面還有一個(gè)總經(jīng)理的對(duì)象的時(shí)候,第一種方法就不適用了
這個(gè)我也是剛學(xué)到的,哈哈哈哈哈,這方法賊牛逼我覺得
如果覺得這篇文章對(duì)你有所幫助,求點(diǎn)個(gè)贊~~!!!
總結(jié)
以上是生活随笔為你收集整理的ES6对于特殊的对象的遍历(iterator)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android进阶之路 - 使用Stet
- 下一篇: 长江水质的评价和预测——综合指标评价