如何将一个数组转换为迭代器?
讲解了两种方式将 JavaScript 数组转换为迭代器:使用内置 Symbol.iterator 方法和自定义迭代器函数。
在 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 },基于原数组操作,不改原数组内容。