Skip to content

迭代器

标签:ES6
创建时间:2022/10/02 09:18:48

介绍

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

  2. iterator 接口就是对象的一个属性,属性名 Symbol.iterator 属性值是一个函数。有了该属性就可以使用 for……of 遍历。

  3. ES6 创造了一种新的遍历命令 for……of 循环,Iterator 接口主要供 for……of 消费

  4. 原生具备 iterator 接口的数据(可用 for of 遍历)

    • Array
    • Arguments
    • Set
    • Map
    • String
    • TypeArray
    • NodeList
  5. 演示 for……of

    js
    let arr = ['梅西','苏亚雷斯','内马尔'];
    for(let item of arr) {
        console.log(item);
    }

工作原理

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

自定义可迭代数据

js
let aggre = {
    title: '集合',
    items: [
        'Messi','Suarez','Neymar'
    ],
    [Symbol.iterator](){
        let index = 0;
        return {
            next:() => {
                if (index < this.items.length) {
                    let res = { value: this.items[index],done: false };
                    index++;
                    return res;
                }
                return { value: undefined,done: true };
            }
        }
    }
}
for(let item of aggre) {
    console.log(item);
}

基于 MIT 许可发布