ES6迭代器生成器

142 阅读2分钟
<script>
    //迭代器(遍历器)  生成器
    // 数据的迭代
    //数组遍历 对象 Map Set
    //对数组的迭代
    //1.for
    //2.map forEach filter

    //迭代器:是个特殊的对象,专门为可迭代对象设计的统一接口。这个方法用来遍历数据。
    //特点 每个迭代器都有next方法,每次执行next返回一个结果对象(value ,done)
    //valve 每次迭代的数据, done 迭代是否结束 Boolean
    //每个迭代器有默认指针开始时指向数据结构的第一个值,每次调用next方法,返回当前值,指针下移。
    //每个迭代器支持 for of 循环
    // let arr = [1, 2, 3, 4];
    //    arr.iterator.next() {value: 1,down : false};
    //    arr.iterator.next() {value: 2,down : false};
    //    arr.iterator.next() {value: 3,down : false};
    //    arr.iterator.next() {value: 4,down : false};
    //    arr.iterator.next() {value: undefined,down : true};


    ///创建一个可以迭代数组的迭代器
    // function createIterator(arr = []) {
    //     let nextIndex = 0;
    //     return {
    //         next() {
    //             if (arr.length - 1 < nextIndex) {
    //                 return {
    //                     value: undefined,
    //                     done: true
    //                 }
    //             } else {
    //                 return {
    //                     value: arr[nextIndex++],
    //                     done: false
    //                 }


    //             }
    //         }
    //     }
    // }
    // var i = createIterator(arr);
    // i.next(); //{value:1,done: false}
    // i.next();
    // i.next();

    //默认的Iterator接口
    // Array Map Set String argument NodeLists
    //Array Map Set
    //enteies(),keys(),values() // forEach
    // let arr = [1, 2, 3, 4];
    // let map = new Map([
    //     ['name', 'aaa'],
    //     ['age', 12],
    //     ['bobbit', 'dog']
    // ])
    // let set = new Set([1, 2, 3, 4, 5]);
    //entries 迭代器 对于数组 返回 [index,value] Map[key,value] Set[key,key]
    // let arrEntries = arr.entries();
    // let mapEntries = map.entries();
    // let setEntries = set.entries();
    // for (let item of arrEntries) {
    //     console.log(item)
    // }
    // for (let item of mapEntries) {
    //     console.log(item)
    // }
    // for (let item of setEntries) {
    //     console.log(item)
    // }

    //所有的迭代器都有 Symbol.iterator 属性,必须通过中括号形式访问[Symble.iterator],返回默认的迭代器。
    // for (let item of arr[Symbol.iterator]()) {
    // console.log(item)
    // }

    //原理 
    //数组中的迭代器指针,每次指向下一个索引
    //Map Set 会把邻接链表 转化为单向链表 指针每次指向一个节点,指针下移
    // for (let item of arr) { //arr[Symbol.iterator]() => arr.values()
    //     console.log(item)
    // }
    // for (let key of map) { //map[Symbol.iterator]() => map.entries()
    //     console.log(key)
    // }
    // for (let key of set) { //set[Symbol.iterator]() => set.keys()
    //     console.log(key)
    // }


    ///生成器 Generator
    //用于生成迭代器
    //生成器是函数 * yieid //产生
    // function* createIterator() {
    //     yield 1;
    //     yield 2;
    //     yield 3;

    // }
    // var i = createIterator()
</script>