📜  ES6-迭代器(1)

📅  最后修改于: 2023-12-03 14:41:01.032000             🧑  作者: Mango

ES6 迭代器

ES6 引入了一种称为迭代器的新对象,该对象提供了一种更好的方式来遍历数据结构。在本文中,我们将讨论什么是迭代器,以及如何使用它们来遍历不同类型的数据结构。

什么是迭代器?

迭代器是一个具有 next() 方法的对象。该方法返回一个包含两个属性的对象:donevalue。如果迭代器已经完成了遍历操作,则 done 属性为 true;否则,done 属性为 falsevalue 属性包含下一个值。

如何使用迭代器?

我们可以使用 for...of 循环来遍历一个实现了迭代器方法的数据结构:

let arr = [1, 2, 3];
for (let value of arr) {
  console.log(value);
}

以上代码将输出:

1
2
3

我们也可以手动使用迭代器来遍历一个数据结构:

let arr = [1, 2, 3];
let iterator = arr[Symbol.iterator]();
let result = iterator.next();
while (!result.done) {
  console.log(result.value);
  result = iterator.next();
}

以上代码也将输出:

1
2
3
内建迭代器

JavaScript 中的许多数据结构都实现了迭代器方法:

  • 数组 (Array):使用 values() 方法返回一个迭代器。
  • 字符串 (String):可以直接使用 for...of 循环遍历。
  • MapSet:使用 entries() 方法返回一个迭代器。
  • Arguments 对象:使用 values() 方法返回一个迭代器。
  • NodeList 对象:使用 values() 方法返回一个迭代器。
自定义迭代器

我们可以自定义一个迭代器方法来遍历我们自己的数据结构。以下是一个自定义迭代器的示例:

let myIterable = {
  data: [1, 2, 3],
  [Symbol.iterator]() {
    let index = 0;
    return {
      next: () => {
        if (index < this.data.length) {
          return { value: this.data[index++], done: false };
        } else {
          return { done: true };
        }
      }
    }
  }
}

for (let value of myIterable) {
  console.log(value);
}

以上代码将输出:

1
2
3
总结

迭代器是一种用于遍历数据结构的对象。它们提供了一种更好的方法来遍历 JavaScript 中的数据对象。我们可以使用 for...of 循环或手动使用迭代器方法来遍历它们。许多内建数据结构都实现了迭代器方法。我们也可以自定义迭代器来遍历我们自己的数据结构。