【ES】笔记-迭代器

迭代器概念

迭代器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作。

  1. ES6 创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费
  2. 原生具备iterator接口的数据(可用for of 遍历)
    a) Array
    b) Arguments
    c) Set
    d) Map
    e) String
    f) TypedArray
    g) NodeList
  3. 工作原理
    a) 创建一个指针对象,指向当前数据结构的起始位置
    b) 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
    c) 接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
    d) 每调用next方法返回一个包含value和done属性的对象
    注: 需要自定义遍历数据的时候,要想到迭代器。

数组迭代

javascript 复制代码
    <script>
        //声明一个数组
        const xiyou=['唐僧','孙悟空','猪八戒','沙僧'];

        //使用for.. of 遍历数组
        for(let v of xiyou){
            console.log(v)
        } 

        let iterator=xiyou[Symbol.iterator]();

        //调用对象的next方法
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());

    </script>

非原生数据对象的自定义实现

javascript 复制代码
    <script>
        //声明一个对象
        const banji = {
            name: "终极一班",
            stus: [
                'xiaoming',
                'xiaoning',
                'xiaotian',
                'knight'
            ],
            [Symbol.iterator]() {
                //索引变量
                let index = 0;
                // 保存this
                let _this = this;
                return {
                    next: function () {  //也可以采用箭头函数,就不需要外层保存this
                        if (index < _this.stus.length) {
                            const result = { value: _this.stus[index], done: false };
                            //下标自增
                            index++;
                            //返回结果
                            return result;
                        }else{
                            return {value: undefined, done: true};
                        }
                    }
                };
            }
        }

        //遍历这个对象 
        for (let v of banji) {
            console.log(v);
        }
    </script>
相关推荐
hd51cc17 分钟前
MFC消息 学习笔记
笔记·学习·mfc
雷工笔记8 小时前
MES学习笔记之SCADA采集的数据如何与MES中的任务关联起来?
笔记·学习
繁星星繁9 小时前
【C++】脚手架学习笔记 gflags与 gtest
c++·笔记·学习
2301_810746319 小时前
CKA冲刺40天笔记 - day20-day21 SSL/TLS详解
运维·笔记·网络协议·kubernetes·ssl
YJlio10 小时前
SDelete 学习笔记(9.18):安全删除、空闲清理与介质回收实战
笔记·学习·安全
74412 小时前
数据结构(C语言版)线性表-单链表的拓展及应用
笔记·强化学习
xiaozi412012 小时前
Ruey S. Tsay《时间序列分析》Python实现笔记:综合与应用
开发语言·笔记·python·机器学习
d111111111d12 小时前
STM32低功耗学习-停止模式-(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
@游子12 小时前
Python学习笔记-Day5
笔记·python·学习
摇滚侠13 小时前
2025最新 SpringCloud 教程,网关功能、创建网关,笔记51、笔记52
java·笔记·spring cloud