ES6+ 迭代器的实现原理

安稳与你 提交于 2019-12-25 22:15:01

迭代器的原理

const arr = [1,2]
    function makeIterator(array){
        let nextIndex = 0;
        return {
            next:function(){
                return nextIndex < array.length ? {
                    value:array[nextIndex++],  //取值
                    done:false  //标记是否遍历完成
                } :{
                    value:undefined,
                    done:true
                }
            }
        }
    }
    let res = makeIterator(arr)
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());

迭代器的使用

let arr1 = [1,2,3,4,5]
    let iter = arr1[Symbol.iterator]()
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());
    console.log(iter.next());

对象实现可迭代

et obj = {
        data:[1,2,3,4],
        [Symbol.iterator](){
            let index = 0
            let that = this
            return {
                next(){
                    if(index<that.data.length){
                        return {
                            value:that.data[index++],
                            done:false
                        }
                    }else{
                        return {
                            value:undefined,
                            done:true
                        }
                    }
                }
            }
        }
    }

    for (let i of obj ){
        console.log(i);
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!