【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>
相关推荐
沪上企服通1 小时前
旧账系统的信创迁移工程:从 MySQL/Oracle 到国产库、国密与电子会计档案闭环
数据库·笔记·数据库架构
三岁就很~酷~2 小时前
ai agent自学 基础命令和上下文监控(9/17)
笔记
彧azz2 小时前
Java学习记录:判断语句
java·笔记·学习·算法
hanlin032 小时前
刷题笔记:力扣第560题-和为k的子数组
笔记·算法·leetcode
摇滚侠3 小时前
《Spring Boot 3:高级与架构设计》第 1 章 元编程与元信息 个人理解 1
java·spring boot·笔记·后端
志尊宝3 小时前
Vue3 零基础每日笔记(046):声明式导航与编程式导航——useRouter / useRoute 双子星
vue.js·笔记·#vue #前端 #前端开发·#javascript·#vue.js
M78佐菲3 小时前
ARM学习笔记(四)
linux·arm开发·笔记·嵌入式硬件·学习
kkkkkkkkkk_Z3 小时前
单片机|学习日记:单片机底层架构与寄存器操作全解析
linux·笔记·单片机·学习·51单片机
CAYA-17 小时前
模电笔记1.1 半导体基础与 PN 结
经验分享·笔记·学习方法
泡泡鱼(敲代码中)18 小时前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee