迭代器

67 阅读2分钟

任何数据结构只要部署Iterator接口,就可以完成遍历操作,ES6提供for...of循环

Iterator 接口是一个内置的对象,它定义了一种标准的方式来遍历集合(如数组、对象、Map、Set等)的元素。一个实现了Iterator接口的对象必须提供一个next()方法,该方法返回一个具有两个属性的对象:value 和 done

  • value:表示当前迭代的元素的值。
  • done:是一个布尔值,表示迭代是否完成。当没有更多的元素可以迭代时,done将为true

迭代器(Iterator)

迭代器是一种对象,它为访问集合元素提供了一种方式,同时避免了直接暴露集合的内部结构。迭代器对象拥有一个next()方法,每次调用这个方法都会返回集合中的下一个元素,直到所有元素都被遍历完毕。如果没有更多的元素可供遍历,next()方法会返回一个特殊的值(通常是undefined)。迭代器的实现方式通常是通过定义一个对象,该对象包含一个next()方法和一个done属性。done属性表示是否还有更多的元素需要遍历,如果还有,done属性为false,否则为true

迭代器的主要应用是遍历可迭代对象,如数组、字符串、Map、Set等。使用for...of语法结构可以方便地遍历这些对象。

const myIterator = {  
  from: 1,  
  to: 5,  
  current: 1,  
  
  next() {  
    if (this.current <= this.to) {  
      return { value: this.current++, done: false };  
    } else {  
      return { value: undefined, done: true };  
    }  
  }  
};  
  
// 使用for...of循环遍历迭代器  
for (let value of myIterator) {  
  console.log(value); // 输出:1, 2, 3, 4, 5  
}

具有Iterator接口的数据

  • array
  • arguments
  • set
  • map
  • string
  • typedArray
  • NodeList

for...in 循环索引

for...of 循环键值

工作原理

创建一个指针对象,指向数据结构的起始位置
第一次调用对象的next()方法,指针自动指向数据结构的第一个数据成员
接下来不断的调用next()方法,直到指向后一个成员
每次调用next()方法,返回value和done属性的对象
done为true结束遍历