ES6為Object添加迭代器

方法一

function it(){
    let keys = Object.keys(this)
    let obj = this
    let idx = 0
    let length = keys.length
    return {
        next: function() {
            if (idx < length) {
                let ret = {
                    value: {
                        key: keys[idx],
                        val: obj[keys[idx]]
                    },
                    done: false
                }
                idx ++
                return ret
            } else {
                return {
                    value: undefined,
                    done: true
                }
            }
        }
    }
}

var a = {x:1, y:2, z:3}

a[Symbol.iterator] = it

for (let v of a) 
{
    console.log('------------')
    console.log(v)
}
/*
------------
{ key: 'x', val: 1 }
------------
{ key: 'y', val: 2 }
------------
{ key: 'z', val: 3 }
*/

for,of循環(huán)會(huì)在迭代器返回對(duì)象的done屬性為true時(shí),停止循環(huán),且不執(zhí)行當(dāng)前循環(huán)體。

方法二

function* it(obj) {
    let propKeys = Object.keys(obj);
    // console.log(propKeys)  // [ 'x', 'y', 'z' ]
    for (let propKey of propKeys) {
        yield {
            key: propKey, 
            val: obj[propKey]
        }
    }
}

var a = {x:1, y:2, z:3}

for (let v of it(a)) 
{
    console.log('------------')
    console.log(v)
}

方法三

function* it(obj) {
    let propKeys = Object.keys(this);
    for (let propKey of propKeys) {
        yield {
            key: propKey, 
            val: this[propKey]
        }
    }
}

var a = {x:1, y:2, z:3}

a[Symbol.iterator] = it

for (let v of a) 
{
    console.log('------------')
    console.log(v)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容