当前位置: 首页 > news >正文

【ES6】迭代器Iterator

JavaScript中的Iterator是一种特殊对象,它允许我们访问并操作对象的每一个元素。Iterator对象由具有next方法的对象创建,next方法返回一个包含两个属性的对象:value和done。value属性是当前元素的值,done属性是一个布尔值,当迭代结束时为true。

在JavaScript中,许多内建的集合对象,如数组、字符串、Map、Set等,都实现了迭代器接口。我们也可以自定义迭代器对象。

自定义迭代器

下面是一个简单的自定义迭代器的例子:

function createIterator(array) {let nextIndex = 0;return {next: function() {return nextIndex < array.length ? { value: array[nextIndex++], done: false } : { done: true };}};
}let iterator = createIterator([1, 2, 3]);console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { done: true }

在这个例子中,我们定义了一个createIterator函数,它接收一个数组作为参数,并返回一个具有next方法的对象。next方法在每次调用时返回一个包含当前元素和done属性的对象,当所有元素都被访问后,done属性将为true。

使用for…of循环

在ES6中引入的for…of循环可以用于遍历具有next方法的对象,如上面的自定义迭代器:

let iterator = createIterator([1, 2, 3]);for (let value of iterator) {console.log(value); // 1, 2, 3
}

for…of循环会不断调用迭代器的next方法,直到返回的done属性为true。在每次迭代中,当前元素的值会被赋值给value变量,然后被输出到控制台。

内建迭代器

除了自定义迭代器,JavaScript还提供了许多内建的迭代器,如数组迭代器、Map迭代器和Set迭代器等。这些内建的迭代器都实现了Iterator接口,可以使用for…of循环进行遍历。

下面是一个使用数组迭代器的例子:

let array = [1, 2, 3];for (let value of array) {console.log(value); // 1, 2, 3
}

在这个例子中,for…of循环直接遍历了数组array。由于数组实现了Iterator接口,所以可以直接使用for…of循环。

http://www.lryc.cn/news/147759.html

相关文章:

  • 火狐浏览器使用scss嵌套编写css无法识别问题
  • Kotlin的Lambda闭包语法
  • day-01 Docker
  • ARM开发,stm32mp157a-A7核SPI总线实验(实现数码管的显示)
  • 思路灰度传感器及红外传感器线序
  • squid服务器
  • spring的后置处理器BeanPostProcessor
  • vue、uniapp中动态添加绑定style、class 9种方法实现
  • 【CicadaPlayer】seek :SeekInCache(int64_t pos)的实现
  • 【C/C++】x -x 的含义
  • [ZenTao]源码阅读:加载自定义任务类型
  • hive分区表 静态分区和动态分区
  • java八股文面试[多线程]——ThreadLocal底层原理和使用场景
  • Android hid发送apdu格式数据
  • Unity碰撞检测(3D和2D)
  • android:控件TextView
  • 3D风速仪 Gill Instruments Limited_R3-50 R3-100 and R3A -100 Manual
  • 深度学习怎么学?
  • WPF 数据验证
  • IDEA的maven想显示层级关系,而非平级
  • (八)k8s实战-身份认证与权限
  • 数学建模:TOPSIS分析
  • 【Qt学习】10 利用QSharedMemory实现单例运行
  • FPGA应用于图像处理
  • vscode python 无法引入上层目录解决
  • [开发|java] java list 取某个属性最大的项
  • 关闭浏览器的跨域校验
  • USRP 简介,对于NI软件无线电你所需要了解的一切
  • RTE_Driver驱动框架和Keil下开发需要支持的xxx_DFP软件包分析
  • ImportError: Cannot load dynamic library. Did you compile LSD?