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

ES6之迭代器

文章目录

  • 前言
  • 迭代器
    • 1.原生具备Iterator接口的数据(可用for...of遍历)
    • 2.工作原理
    • 3.自定义遍历数据
  • 总结


前言

迭代器(Iterator)
for…of遍历


迭代器

迭代器是一种接口,为各种不同数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作。(其实大多数语言都有接口,在js中这个接口就是对象的一种属性

1.原生具备Iterator接口的数据(可用for…of遍历)

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

2.工作原理

  • 创建一个指针对象,指向当前数据结构的起始位置
  • 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
  • 接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
  • 每调用next方法返回一个包含value和done属性的对象
	let namelist = ['张三', '李四', '王五', '赵六'];
        for (let n of namelist) {
            console.log(n);
        }
        for (let n in namelist) {
            console.log(n);
        }

        let iterator = namelist[Symbol.iterator]();
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());

在这里插入图片描述
这里可以看一下for…of,for…in的区别,前者是遍历键值,后者遍历键名。看一下done属性,你能发现什么呢。

3.自定义遍历数据

知道了工作原理,那么我们就开始思考利用迭代器怎样自定义遍历数据

	<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        const pepole = {
            name: '王五',
            like: [
                '篮球',
                '武术',
                '吃东西'
            ],
            [Symbol.iterator]() {
                let index = 0;
                let _this = this;
                return {
                    next: function() {
                        if (index < _this.like.length) {
                            const result = {
                                value: _this.like[index],
                                done: false
                            }
                            index++;
                            return result;
                        } else {
                            return {
                                value: undefined,
                                done: true
                            };
                        }
                    }
                }
            }
        }
        for (let p of pepole) {
            console.log(p);
        }
    </script>
</body>

</html>

在这里插入图片描述


总结

以上就是迭代器的介绍。


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

相关文章:

  • Chromium 中sqlite数据库操作演示c++
  • PCL 点云分割 基于CPC算法的分割
  • 云计算:定义、类型及对企业的影响
  • 100+SCI科研绘图系列教程(R和python)
  • Android S长按文件或视频或编辑中文字或输入框中文字不会弹出分享菜单
  • TCP可靠连接的建立和释放,TCP报文段的格式,UDP简单介绍
  • Windows11关闭Edge/Chrome浏览器触摸板双指前进后退手势(防止误触切换页面)
  • java中设计模式总结
  • liunx 常用命令1-目录/文件:新建、修改、移动和删除
  • O2OA (翱途) 平台 V8.0 发布新增数据台账能力
  • QJsonObject 类
  • Docker安装、Docker基本操作
  • 一名【合格】前端工程师的自检清单
  • 麒麟KylinV10SP1(2203)推荐安装一些硬件监控类软件与使用
  • Socks5 协议简介
  • HTTP第三讲——四层模型、七层模型
  • ChatGPT会对我们日常生活带来什么影响?这些技术会改变我们学习阅读工作方式吗?
  • Netty基础(二)
  • 分析vmlinux编译过程
  • Android 自定义View实战—制作一个简易输入框
  • Python 面向对象
  • 关于百度地图开放平台api覆盖物“自定义Marker图标”不能正常显示的解决方案
  • 实验二 存储器管理
  • 探究Qt Quick之Overlay类的魅力
  • Docker 配置记录
  • 【tkinter 专栏】专栏前言