侧边栏壁纸
  • 累计撰写 197 篇文章
  • 累计收到 496 条评论

使用Symbol.iterator定义可迭代对象

2019-11-10 / 0 评论 / 35 阅读
let booksInfo = {
    authDescipt: {
        a: ['hello','book', 'san'],
        b: ['nihao', 'henhao', 'three'],
        c: ['aaa', 'bbb', 'ccc']
    }
}

booksInfo[Symbol.iterator] = function () {
    let AllAuthDescipt = this.authDescipt;
    let keys = Reflect.ownKeys(AllAuthDescipt)
    let values = []
    return {
        next() {
            if (!values.length) {
                if (keys.length) {
                    values = AllAuthDescipt[keys[0]]
                    keys.shift()
                }
            }
            return {
                done: !values.length,
                value: values.shift(),
            }
        }
    }
}

for (let v of booksInfo) {
    console.log(v)
// hello
// index.js:31 book
// index.js:31 san
// index.js:31 nihao
// index.js:31 henhao
// index.js:31 three
// index.js:31 aaa
// index.js:31 bbb
// index.js:31 ccc
}

评论一下?

OωO
取消