如何将一个数组转换为迭代器?

讲解了两种方式将 JavaScript 数组转换为迭代器:使用内置 Symbol.iterator 方法和自定义迭代器函数。

JavaScript 简单 迭代器

在 JavaScript 中,数组是可迭代对象(iterable),这意味着可以使用 Symbol.iterator 获取一个迭代器来处理数组元素(类似 Python 的迭代概念)。以下是常见方法:

1. 原生方式:使用 Array 的内置 Symbol.iterator 方法

所有数组实例都已实现了 Symbol.iterator,无需额外转化代码。调用该方法直接生成迭代器:

const myArray = [10, 20, 30, 40];
const iterator = myArray[Symbol.iterator]();

console.log(iterator.next()); // { value: 10, done: false }
console.log(iterator.next()); // { value: 20, done: false }
console.log(iterator.next()); // { value: 30, done: false }
console.log(iterator.next()); // { value: 40, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

此迭代器通过 next 方法一步步推进,返回的 value 表示序列中的当前元素,done 表示循环是否结束。

2. 手动方式:自定义迭代器函数

如果需要扩展功能或在无 Symbol.iterator 支持的环境中(如旧浏览器)自定义迭代器:

function createArrayIterator(arr) {
  let index = 0;
  return {
    next: function() {
      if (index < arr.length) {
        return { value: arr[index++], done: false };
      } else {
        return { value: undefined, done: true };
      }
    }
  };
}

const array = ['a', 'b', 'c'];
const customIterator = createArrayIterator(array);
console.log(customIterator.next()); // { value: 'a', done: false }
console.log(customIterator.next()); // { value: 'b', done: false }
console.log(customIterator.next()); // { value: 'c', done: false }
console.log(customIterator.next()); // { value: undefined, done: true }

此方法模仿标准迭代协议:每次调用 next() 返回对象 { value, done },基于原数组操作,不改原数组内容。