1.背景知识

1)迭代的定义:从一个数据集合中按照一定的顺序,不断取出数据的过程称为迭代

2)迭代和遍历的区别

迭代:迭代强调的是依次取数据的过程,并不保证取多少,也不保证把所有的数据都取完

遍历:遍历强调的是要把整个数据依次全部取出

3)迭代器:对迭代过程的封装,在不同的语言中有不同的表现形式,通常为对象

4)迭代模式:一种设计模式,用于统一迭代过程,迭代模式规范了迭代器规格

  • 迭代器应该具有得到下一个数据的能力
  • 迭代器应该具有判断是否还有后续数据的能力

2.JS中的迭代器

JS规定,如果一个对象具有next方法,并且该方法返回一个对象,该对象的格式如例【例2】,则认为该对象是一个迭代器

含义

next方法:用于得到下一个数据

返回的对象:value——下一个数据的值;done——boolean,是否迭代完成

【例】数组的迭代

const arr = [1, 2, 3, 4, 5];
//迭代数组
const iterator = {i: 0,next() {var result = {value: arr[this.i],done: this.i >= arr.length}this.i++return result;}
}
let data = iterator.next();
console.log(data);
while (!data.done) {console.log(data.value);//进行下一次迭代data = iterator.next();console.log(data)
}
console.log('迭代完成');

【例2】迭代器创建函数

const arr1 = [12, 43, 6534, 1235, 6734];
const arr2 = [123, 56, 876, 312, 957];
//迭代器创建函数
function creatIterator(arr) {let i = 0;return {next() {var result = {value: arr[i],done: i >= arr.length}i++;return result;}}
}
const iter1 = creatIterator(arr1);
const iter2 = creatIterator(arr2);
console.log(iter1);

【例3】斐波拉契数列

//1 1 2 3 5 8 13 ……
function getFeiboIterator() {let prev1 = 1,prev2 = 1,n = 1;return {next() {let value;//前两位为1if (n <= 2) {value = 1;} else {//从第三位开始,值为其前两位的和value = prev1 + prev2;}const result = {value,done: false};//flag右移,即需要更新前两位的值prev2 = prev1;prev1 = result.value;n++;return result;}}
}
feibo = getFeiboIterator();

【结果】

什么是迭代器,JS如何实现迭代器相关推荐

  1. JS数组的迭代器方法

    迭代器forEachevery 一.迭代器方法 迭代器方法, 这些方法对数组中的每一个元素应用一个函数,可以返回一个值,一组值或一个新数组. 不生成新数组的迭代器方法 1.forEach() forE ...

  2. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  3. 迭代器和反向迭代器,常量迭代器和非常量迭代器

    迭代器的类型共有4种:<T>::Iiterator,<T>::const_iterator,<T>::reverse_iterator,<T>::con ...

  4. python中迭代器有哪些_Python迭代器:什么是Python中的迭代器以及如何使用它?

    Python编程语言已经扩展了创新的每一个方面,包括机器学习.数据科学.人工智能等,这些概念是Python作为编程语言取得成功的基石.在本文中,我们将通过以下概念来理解Pytho Python编程语言 ...

  5. python3迭代器是什么,python3 迭代器

    1. 想要了解 迭代器 ,需要先 知道什么是 可迭代对象. 简单点说,可以直接作用于for循环的对象,称之为可迭代对象(Iterable). 1.png 可迭代对象,一定实现了__iter__方法.i ...

  6. 2 STL迭代器介绍【前向迭代器、双向迭代器、随机访问迭代器】【迭代器遍历容器】

    文章目录 0 - 前言 1 - 迭代器定义 2 - 迭代器分类 3 - 迭代器使用 0 - 前言 参考:http://c.biancheng.net/view/6675.html 1 - 迭代器定义 ...

  7. 迭代器以及如何获得迭代器地址

    data structure的定义:More precisely, a data structure is a collection of data values, the relationships ...

  8. C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))

    一.迭代器的头文件 所有的容器都定义有自己的iterator类型,因此如果单单使用容器,只需要包含对应容器的头文件即可 不过有些特殊的iterator,被定义在头文件<iterator>中 ...

  9. python迭代器怎么写_python迭代器

    假如你不知道什么是iterable,我们可以翻翻词典,首先得到一个中文的解释,尽管翻译过来了你可能也不知道,但是没关系,我会带着你一步一步来分析. 迭代和可迭代协议 什么叫迭代 现在,我们已经获得了一 ...

最新文章

  1. 数据合并设计_八秒搞定合并相同内容的单元格,你却加班了1小时
  2. 腾讯研究院发布:《人工智能+制造产业发展研究》报告
  3. css3 3d变换和动画——回顾
  4. HDU 2035 人见人爱A^B
  5. java登录界面命令_Java命令行界面(第30部分):观察
  6. b250支持服务器cpu,b250m主板应该上什么cpu
  7. 桌面live2d人物插件(HBuilderx )
  8. TJUPT 无法与服务器建立连接问题的解决方法
  9. Redis基础知识 底层数据结构的实现 redis中的对象概念
  10. LOI2504 [HAOI2006]聪明的猴子
  11. k8s - Service ExternalName
  12. nrf52832 学习笔记(三)蓝牙从机广播
  13. java获取当前日期 星期几_java获取当前日期是星期几的方法
  14. Python使用Pillow库进行图像
  15. 操作系统中怎么预防死锁呢?简单列举几种方法!
  16. mac wordcloud 字体设置
  17. 信息搜集学习--在线工具学习
  18. java数字转换器_如何用java写个整数进制转换器
  19. 迪威视讯打造全国网格化管理样板 龙华“织网工程”
  20. ASP.Net MVC3 图片上传详解(form.js,bootstrap)

热门文章

  1. Spring事务“套路”面试
  2. 压箱底总结:流系统端到端一致性对比
  3. 怎么确保网站的可用性
  4. MySQL三大日志及主从复制的原理
  5. linux下使用C++操作mysql
  6. 实时音视频助力在线教育风口
  7. Linux AV1硬件视频解码将支持Intel Tiger Lake
  8. 5G万物智联下互联网通信技术升级之路
  9. 十个问题理解Linux epoll工作原理
  10. go errgroup 递归搜索目录中的Go文件