在 j**ascript 中,有三种类型的迭代器:
数组迭代器:通过遍历数组来访问其元素。 字符串迭代器:通过遍历字符串来访问其字符。 映射迭代器和设置迭代器:访问映射的键和值,并通过遍历它们来设置数据结构。 此外,在 ES6 中,我们还可以使用自定义迭代器来迭代对象中的元素。 我们可以使用符号Iterator 方法,用于创建自定义迭代器,该迭代器使用 Next 方法返回 Iterator 对象。
另外generator
函数可以被认为是一种特殊的迭代器,它可以暂停和恢复执行,允许我们通过控制迭代器的执行来生成序列。
数组迭代器是 j**ascript 数组的迭代器,可以访问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())// console.log(iterator.next())// console.log(iterator.next())// console.log(iterator.next())//除了上述迭代方法外,您还可以使用 for...。of 语句来使用迭代器,如下所示:
const arr = ['a', 'b', 'c'];for (const item of arr) // output:// a// b// c此外,除了上述迭代方法外,数组迭代器还可以使用常见的数组方法,如 foreach()、map()、filter() 和 reduce() 进行迭代操作。
string iterator
是 ES6 引入的迭代器,可用于遍历字符串。 字符串迭代器没有自己的迭代方法,但它们可以使用泛型迭代方法。 以下是 String Iterator 可以使用的迭代方法:
next()
:以 格式返回迭代器的下一个值。
symbol.iterator
:返回一个迭代器对象,该对象可用于...。of 循环遍历字符串。
示例如下:
const str = "hello";const striterator = str[symbol.iterator]()console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// console.log(striterator.next())// for (let char of str) // output:// h// e// l// l// oMap Iterator 和 Set Iterator 都具有以下迭代方法:
next()
:返回迭代器中的下一个元素并包含两个属性(value 和 done)的对象。 value 属性是当前元素的值,done 属性指示迭代器是否已完全迭代。
symbol.iterator
:返回迭代器本身,以便它可以用于...。回收利用。
Map Iterator 还具有以下方法:
entries()
:返回一个新的迭代器对象,其元素是 [key, value] 的数组。
keys()
:返回一个新的迭代器对象,其元素是映射中的键名。
values()
:返回一个新的迭代器对象,其元素是映射中的键值。
设置迭代器还具有以下方法:
entries()
:返回一个新的迭代器对象,其元素是 [value, value] 的数组。
keys()
:返回一个新的迭代器对象,其元素是集合中的值。
values()
:返回一个新的迭代器对象,其元素是集合中的值。
如何使用地图迭代器的示例
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设置迭代器的使用示例
const myset = new set(['apple', 'banana', 'orange']);用于....的循环遍历 setfor(myset 的 const 项)手动遍历 setconst setiterator = mysetvalues();let next = setiterator.next();while (!next.done)