zoukankan      html  css  js  c++  java
  • ES6中的迭代器iterator

    什么是迭代器?

    统一的遍历数据的方式。

    首先获取到迭代器的指针,初始时这个指针指向的是第一条数据之前。通过调用指针的next()方法,使指针指向下一条数据。每一个next()都会返回一个对象,其中包含两个属性,value表示想要获取的值,done是个布尔值,false表示当前指针指向有值,true表示当前遍历结束。

    支持迭代器的数据类型?

    Array、Map、Set、String、TypedArray、函数的arguments对象、Nodelists对象

    Array数据获取迭代器的方法

    entries()

    通过调用entries()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{value : {索引:值}, done : false/true}

    values()

    通过调用values()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{{value : 值,  done : false/true}}

    keys()

    通过调用keys()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{{value : 索引,  done : false/true}}

    [Symbol.iterator]()

    可迭代对象中默认包含一个Symbol.iterator属性,是一个函数。通过调用[Symbol.iterator]()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{{value值,  done : false/true}}

    如何为自定义对象添加迭代器?

    var obj = {
            name:'ashen',
            age:21,
            [Symbol.iterator]:function(){
            let i = 0;
            let keys = Object.keys(this); // 获取当前对象的所有属性并形成一个数组
            return {
                next: function(){
                    return {
                        value:keys[i++], // 外部每次执行next都能得到数组中的第i个元素
                        done:i > keys.length // 如果数组的数据已经遍历完则返回true
                    }
                }
            }
        }
    }

    迭代器的应用场景

    • 解构赋值
    • 扩展运算符
    • for..of..循环
    • 。。。
  • 相关阅读:
    Linux进程关系
    ambari 卸载脚本
    CentOS-7.2安装Ambari-2.6.1
    MYSQL57密码策略修改
    CentOS7 离线安装MySQL
    centos 安装mysql Package: akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda)
    mysql 数据备份
    spring-boot-starter-thymeleaf对没有结束符的HTML5标签解析出错
    ssh: scp命令
    python:os.path
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12714375.html
Copyright © 2011-2022 走看看