首页>>新闻中心>>ES6学习方法

Iterator 不支持遍历的数据进行遍历

来源: 本站    发布时间: 2021-03-01 23:11    阅读次数:

// Iterator 不支持遍历的数据进行遍历
    // function makeIterator(arr) {  //创建一个指针,实际就是一个指针对象下标为0
    //     let nextIndex = 0
    //     return {
    //         next() {
    //             return nextIndex< arr.length? {
    //                 value: arr[nextIndex++],
    //                 done: false
    //             }:{
    //                 value: undefined,
    //                 done: true
    //             }
    //         }
    //     }
    // }
    // let it = makeIterator(['a','b', 'c'])
    // console.log(it.next()) //{value: "a", done: false}
    // console.log(it.next()) //{value: "b", done: false}
    let arr = ['a','b', 'c']
    let it1 = arr[Symbol.iterator]()
    console.log(it1.next())
    //具有原生Iterator接口的数据结构 Array Map Set Map String TypeArray 函数的arguments对象 NodeList对象
    // 可迭代协议:Symbol.iterator
    // 迭代器协议: return { next() { return {value, done}}

    let courses = {
        allCourse: {
            frontend: ['ES', '小程序', 'Vue', 'React'],
            backend: ['Java', 'Python', 'SpringBoot'],
            webapp: ['Android', 'IOS']
        }
    }
    // courses[Symbol.iterator] = function (){
    //     let allCourse = this.allCourse
    //     let keys = Reflect.ownKeys(allCourse)
    //     let values = []
    //     return {
    //         next() {
    //             if(!values.length) {
    //                 if (keys.length) {
    //                     values = allCourse[keys[0]]
    //                     keys.shift()
    //                 }
    //             }
    //             return {
    //                 done: !values.length,
    //                 value: values.shift()
    //             }
    //         }
    //     }
    // }

    //Generator
    courses[Symbol.iterator] = function* (){
        let allCourse = this.allCourse
        let keys = Reflect.ownKeys(allCourse)
        let values = []
        while (1){
            if(!values.length) {
                if (keys.length) {
                    values = allCourse[keys[0]]
                    keys.shift()
                    yield  values.shift()
                } else{
                    return false
                }
            }else{
                yield  values.shift()
            }
        }
    }
    for (let c of courses) {
        console.log(c)
    }
一起设计吧
上一篇: Generator管理
BACK