当前位置: 首页 > article >正文

【es6复习笔记】迭代器(10)

什么是迭代器?

迭代器(Iterator)是一种对象,它能够遍历并访问一个集合中的元素。在 JavaScript 中,迭代器提供了一种统一的方式来处理各种集合,如数组、字符串、Map、Set 等。通过迭代器,我们可以按顺序访问集合中的元素,而不需要关心集合的内部结构。

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

工作原理

  1. 创建一个指针对象,指向当前数据结构的起始位置。
  2. 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员。
  3. 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员。
  4. 每调用 next 方法返回一个包含 valuedone 属性的对象。

原生具备iterator接口的数据

  • Array
  • Arguments
  • Set
  • Map
  • String
  • TypedArray
  • NodeList

如何使用迭代器?

在 JavaScript 中,我们可以通过 Symbol.iterator 方法来获取一个集合的迭代器。然后,我们可以使用 next() 方法来遍历集合中的元素。next() 方法会返回一个对象,其中包含两个属性:valuedonevalue 表示当前遍历到的元素,done 表示是否已经遍历完所有元素。

示例代码

下面是一个使用迭代器遍历数组的示例代码:

// 声明一个数组
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());

在这个示例中,我们首先使用 for...of 循环遍历了数组 xiyou。然后,我们获取了数组的迭代器,并使用 next() 方法遍历了数组中的元素。

自定义迭代器

除了使用内置的迭代器,我们还可以自定义迭代器。例如,我们可以为一个对象定义一个迭代器,使得这个对象可以被 for...of 循环遍历。

下面是一个自定义迭代器的示例代码:

// 声明一个对象
const banji = {
    name: "终极一班",
    stus: [
        'xiaoming',
        'xiaoning',
        'xiaotian',
        'knight'
    ],
    [Symbol.iterator]() {
        // 索引变量
        let index = 0;
        //
        let _this = this;
        return {
            next: function () {
                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);
}

在这个示例中,我们为对象 banji 定义了一个迭代器。这个迭代器使用一个索引变量 index 来跟踪当前遍历的位置,并通过 next() 方法返回下一个元素。这样,我们就可以使用 for...of 循环来遍历对象 banji 中的 stus 数组了。

总结

迭代器是一种强大的工具,它允许我们以统一的方式遍历各种集合。通过自定义迭代器,我们可以使对象也能够被 for...of 循环遍历。希望这个教程对你有所帮助!


http://www.kler.cn/a/451099.html

相关文章:

  • Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理
  • GPT人工智能在医疗文档中的应用
  • 数字工厂管理系统就是ERP系统吗
  • VSCode 性能优化指南:提高编码效率,减少资源占用
  • 运动控制卡网络通讯的心跳检测之C#上位机编程
  • 仿真中产生的simv文件
  • Web入门常用标签、属性、属性值
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证2)
  • 数据结构与算法易错问题总结
  • 云备份项目--工具类编写
  • Unity AVPro Video使用和WebGL播放视频流
  • 谷歌浏览器的网络安全检测工具介绍
  • 【Linux网络编程】第十三弹---构建HTTP响应与请求处理系统:从HttpResponse到HttpServer的实战
  • 【Web】2024“国城杯”网络安全挑战大赛决赛题解(全)
  • 基于谱聚类的多模态多目标浣熊优化算法(MMOCOA-SC)求解ZDT1-ZDT4,ZDT6和工程应用--盘式制动器优化,MATLAB代码
  • vite + vue3 + tailwind 启动之后报错
  • 回归预测 | MATLAB实现CNN-LSSVM卷积神经网络结合最小二乘支持向量机多输入单输出回归预测
  • 【es6复习笔记】rest参数(7)
  • Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果
  • Java爬虫获取1688 item_search_img接口详细解析
  • openjdk17 从C++视角看 String的intern的jni方法JVM_InternString方法被gcc编译器连接
  • 【逆向篇】Web逆向WebPack结构分析
  • 阿里云 Java 后端一面,什么难度?
  • 第11周作业
  • 全国硕士研究生入学考试(考研)常识详解之分数构成:初试成绩、复试成绩及复录比
  • C++练习:图论的两种遍历方式