什么是迭代器,JS如何实现迭代器
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如何实现迭代器相关推荐
- JS数组的迭代器方法
迭代器forEachevery 一.迭代器方法 迭代器方法, 这些方法对数组中的每一个元素应用一个函数,可以返回一个值,一组值或一个新数组. 不生成新数组的迭代器方法 1.forEach() forE ...
- python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...
复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象----> 延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...
- 迭代器和反向迭代器,常量迭代器和非常量迭代器
迭代器的类型共有4种:<T>::Iiterator,<T>::const_iterator,<T>::reverse_iterator,<T>::con ...
- python中迭代器有哪些_Python迭代器:什么是Python中的迭代器以及如何使用它?
Python编程语言已经扩展了创新的每一个方面,包括机器学习.数据科学.人工智能等,这些概念是Python作为编程语言取得成功的基石.在本文中,我们将通过以下概念来理解Pytho Python编程语言 ...
- python3迭代器是什么,python3 迭代器
1. 想要了解 迭代器 ,需要先 知道什么是 可迭代对象. 简单点说,可以直接作用于for循环的对象,称之为可迭代对象(Iterable). 1.png 可迭代对象,一定实现了__iter__方法.i ...
- 2 STL迭代器介绍【前向迭代器、双向迭代器、随机访问迭代器】【迭代器遍历容器】
文章目录 0 - 前言 1 - 迭代器定义 2 - 迭代器分类 3 - 迭代器使用 0 - 前言 参考:http://c.biancheng.net/view/6675.html 1 - 迭代器定义 ...
- 迭代器以及如何获得迭代器地址
data structure的定义:More precisely, a data structure is a collection of data values, the relationships ...
- C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))
一.迭代器的头文件 所有的容器都定义有自己的iterator类型,因此如果单单使用容器,只需要包含对应容器的头文件即可 不过有些特殊的iterator,被定义在头文件<iterator>中 ...
- python迭代器怎么写_python迭代器
假如你不知道什么是iterable,我们可以翻翻词典,首先得到一个中文的解释,尽管翻译过来了你可能也不知道,但是没关系,我会带着你一步一步来分析. 迭代和可迭代协议 什么叫迭代 现在,我们已经获得了一 ...
最新文章
- 数据合并设计_八秒搞定合并相同内容的单元格,你却加班了1小时
- 腾讯研究院发布:《人工智能+制造产业发展研究》报告
- css3 3d变换和动画——回顾
- HDU 2035 人见人爱A^B
- java登录界面命令_Java命令行界面(第30部分):观察
- b250支持服务器cpu,b250m主板应该上什么cpu
- 桌面live2d人物插件(HBuilderx )
- TJUPT 无法与服务器建立连接问题的解决方法
- Redis基础知识 底层数据结构的实现 redis中的对象概念
- LOI2504 [HAOI2006]聪明的猴子
- k8s - Service ExternalName
- nrf52832 学习笔记(三)蓝牙从机广播
- java获取当前日期 星期几_java获取当前日期是星期几的方法
- Python使用Pillow库进行图像
- 操作系统中怎么预防死锁呢?简单列举几种方法!
- mac wordcloud 字体设置
- 信息搜集学习--在线工具学习
- java数字转换器_如何用java写个整数进制转换器
- 迪威视讯打造全国网格化管理样板 龙华“织网工程”
- ASP.Net MVC3 图片上传详解(form.js,bootstrap)