迭代器

58 阅读1分钟

迭代器

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

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

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

    • Array
    • Arguments
    • Set
    • Map
    • String
    • TypedArray
    • nodeList
  • 工作原理

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

注:需要自定义遍历数据的时候,要想到迭代器

自定义迭代器

const banji = {
  name:"终极一班",
  stus:['xiaom','xiaon','xiaoh','xiaox'],
  [Symbol.iterator](){
    let index = 0;
    return {
      next:()=>{
        if (index < this.stus.length) {
          const result = {value:this.stus[index],done:false}
          index++;
          return result;
        }else{
          return {value:undefined,done:true};
        }
      }
    }
  }
}

for (const v of banji) {
  console.log(v); //'xiaom','xiaon','xiaoh','xiaox'
}