JS有哪些迭代器? 它是如何工作的?

小夏 科技 更新 2024-02-15

在 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// o
Map 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)

相似文章

    使用烟道冷凝器有什么好处?

    使用烟道冷凝器有以下好处 .能源 烟道冷凝器能够有效地 烟气中的废热,这些废热通常在排放过程中被浪费掉。这些热量可用于预热锅炉给水 加热过程或产生蒸汽,从而提高能源效率 降低运营成本并减少对化石燃料等一次能源的依赖。.提高热效率 通过冷凝烟气中的水蒸气,降低烟气温度,有助于提高锅炉或其他热力设备的热...

    卵巢早衰的症状是什么?我该如何预防?

    人人享有健康 说 卵巢功能过早衰,也称为卵巢功能减退,是指女性的卵巢功能在 岁之前开始下降或完全消失。这种疾病在现代城市女性中很常见,对她们的健康和生活质量构成巨大威胁。卵巢早衰的症状多种多样,因此及早发现和干预很重要。一般来说,卵巢早衰的主要症状包括月经失调 不孕 干燥 减退 性功能障碍 情绪波动...

    军校优势专业有哪些?如何选择专业?

    当然,近几年也逐步改革,将指挥与非指挥专业合并为指挥与技术融合专业,但指挥与技术融合专业在大三时也会分为指挥与非指挥专业。非指挥专业包括一些技术专业,如计算机科学 电气工程 通信工程 机械工程.如果你想去军队学习一些技术,如果分数够了,你会更喜欢非指挥专业,以后参加考试 保证 的机会会更大,体能训练...

    固定IP地址的优点是什么?我如何获得它?

    随着网络技术的不断发展,越来越多的人开始使用动态IP上网。但是,对于某些特定的 Web 应用程序,需要固定的 IP 地址。本文将介绍固定 IP 地址的概念 它的好处以及如何获得一个。.固定IP地址的概念。固定 IP 地址是分配给网络中的计算机或设备的唯一且不变的 IP 地址。与动态 IP 地址不同,...

    使用洗眼器时需要注意哪些问题?

    洗眼器是安全劳动保护的必备设备,当工人的眼睛意外受伤时,可以尽快使用洗眼器冲洗干净!那么,使用洗眼器时需要注意哪些问题呢?下面就来看看洗眼器厂家为大家做的介绍吧!冲洗身体其他部位时,用手拉动阀门的杠杆,水会自动从喷头喷出,使用后必须将杠杆向上复位 不要用力过猛打开和关闭球阀,只需轻轻转动即可,不要拧...