美文网首页
ES6 Iterator的应用

ES6 Iterator的应用

作者: 阿昕_ | 来源:发表于2018-08-17 18:56 被阅读26次
    • for...of只能遍历拥有iterator属性的对象,所以普通的对象是无法使用iterator遍历的,可以自己模拟一个遍历器,代码如下:
    let obj = {
        a: 1,
        b:2
    }
    
    // 自定义遍历器
    Object.defineProperty( obj, Symbol.iterator, {
        enumerable: false,
        writeable: false,
        configurable: true,
        value(){
            let keys = Object.keys(obj)
            let idx = 0
            let o = this
            return {
                next(){
                    return {
                        value: o[keys[idx++]],
                        done: (idx > keys.length)
                    }
                }
            }
        }
    })
    
    for(let v of obj){
        console.log(v)      // 1 2
    }
    
    • 根据遍历器的特性,我们可以定义一个"无限迭代器",下面展示一个随即生成"无限个"手机号码的例子
    let seconds = [3,4,5,7,8]
    let numList = []
    let randomNum = {
       [Symbol.iterator](){
           return {
               next(){
                   return {
                       value: `1${seconds[Math.floor(Math.random()*seconds.length)]}${parseInt(Math.random()*899999999+100000000)}`
                   }
               }
           }
       }
    }
    
    for(let v of randomNum){
       numList.push(v)
       if(numList.length === 100) break     //   如果不对数量加以控制,则永远不会结束,程序将被挂起
    }
    
    console.log(numList)
    

    相关文章

      网友评论

          本文标题:ES6 Iterator的应用

          本文链接:https://www.haomeiwen.com/subject/hfbtiftx.html