JS 有哪些迭代器?该如何使用?
迭代器分类
在 JavaScript 中,有三种类型的迭代器:
- Array Iterator(数组迭代器):通过对数组进行迭代以访问其元素。
- String Iterator(字符串迭代器):通过对字符串进行迭代以访问其字符。
- Map Iterator(映射迭代器)和 Set Iterator(集合迭代器):通过对 Map 和 Set 数据结构进行迭代以访问其键和值。
此外,在 ES6 中,我们还可以使用自定义迭代器来迭代对象中的元素。我们可以使用 Symbol.iterator 方法来创建自定义迭代器,该方法返回一个具有 next 方法的迭代器对象。
另外, Generator
函数可以看作是一种特殊的迭代器,它能够暂停执行和恢复执行,使得我们可以通过控制迭代器的执行来生成序列。
Array Iterator(数组迭代器)有哪些迭代方法?
Array Iterator(数组迭代器)是针对 JavaScript 数组的迭代器,它可以通过 Array.prototype[Symbol.iterator]()
方法来获取。
获取到数组迭代器后,我们可以使用以下迭代方法:
next()
: 返回一个包含 value 和 done 属性的对象,value 表示下一个元素的值,done 表示是否迭代结束。return()
: 用于提前终止迭代,并返回给定的值。throw()
: 用于向迭代器抛出一个异常。
下面是一个使用迭代器的示例代码:
const arr = ['a', 'b', 'c']; const iterator = arr[Symbol.iterator](); console.log(iterator.next()); // { value: 'a', done: false } console.log(iterator.next()); // { value: 'b', done: false } console.log(iterator.next()); // { value: 'c', done: false } console.log(iterator.next()); // { value: undefined, done: true }
除了以上的迭代方法,还可以通过 for...of 语句来使用迭代器,如下所示:
const arr = ['a', 'b', 'c']; for (const item of arr) { console.log(item); } // output: // a // b // c
另外,数组迭代器除了上述的迭代方法,还可以使用 forEach()、map()、filter()、reduce() 等常见数组方法进行迭代操作;
String Iterator(字符串迭代器) 有哪些迭代方法?
String Iterator
是 ES6 引入的一种迭代器,可以用于遍历字符串。String Iterator 没有自己的迭代方法,但可以使用通用的迭代方法。以下是 String Iterator 可以使用的迭代方法:
next()
:返回迭代器的下一个值,格式为 {value: string, done: boolean}。Symbol.iterator
:返回一个迭代器对象,可以使用 for...of 循环来遍历字符串。
示例代码如下:
const str = "hello"; const strIterator = str[Symbol.iterator](); console.log(strIterator.next()); // { value: 'h', done: false } console.log(strIterator.next()); // { value: 'e', done: false } console.log(strIterator.next()); // { value: 'l', done: false } console.log(strIterator.next()); // { value: 'l', done: false } console.log(strIterator.next()); // { value: 'o', done: false } console.log(strIterator.next()); // { value: undefined, done: true } for (let char of str) { console.log(char); } // Output: // h // e // l // l // o
Map Iterator(映射迭代器)和 Set Iterator(集合迭代器)有哪些迭代方法?
Map Iterator 和 Set Iterator 都有以下迭代方法:
next()
: 返回迭代器中下一个元素的对象,对象包含 value 和 done 两个属性。value 属性是当前元素的值,done 属性表示迭代器是否已经迭代完成。Symbol.iterator
: 返回迭代器本身,使其可被 for...of 循环使用。
Map Iterator 还有以下方法:
entries()
: 返回一个新的迭代器对象,该迭代器对象的元素是 [key, value] 数组。keys()
: 返回一个新的迭代器对象,该迭代器对象的元素是 Map 中的键名。values()
: 返回一个新的迭代器对象,该迭代器对象的元素是 Map 中的键值。
Set Iterator 还有以下方法:
entries()
: 返回一个新的迭代器对象,该迭代器对象的元素是 [value, value] 数组。keys()
: 返回一个新的迭代器对象,该迭代器对象的元素是 Set 中的值。values()
: 返回一个新的迭代器对象,该迭代器对象的元素是 Set 中的值。
Map Iterator 使用举例
const myMap = new Map(); myMap.set("key1", "value1"); myMap.set("key2", "value2"); myMap.set("key3", "value3"); const mapIterator = myMap.entries(); console.log(mapIterator.next().value); // ["key1", "value1"] console.log(mapIterator.next().value); // ["key2", "value2"] console.log(mapIterator.next().value); // ["key3", "value3"] console.log(mapIterator.next().value); // undefined
Set Iterator 使用举例
const mySet = new Set(['apple', 'banana', 'orange']); // 使用 for...of 循环遍历 Set for (const item of mySet) { console.log(item); } // 使用 Set 迭代器手动遍历 Set const setIterator = mySet.values(); let next = setIterator.next(); while (!next.done) { console.log(next.value); next = setIterator.next(); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论