IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Iterator遍历器的底层原理 -> 正文阅读

[数据结构与算法]Iterator遍历器的底层原理

Iterator遍历器的底层原理

遍历器Iterator的遍历过程

1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器本质上,就是一个指针对象。
2)第一次调用对象的next方法,可以将指针指向数据结构的第一位成员。
3)第二次调用对象的next方法,指针就指向数据结构的第二位成员。
4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。

以数组arr为例

<script>
	let arr = [11, 22, 33];
	function myIterator(array){
            // 定义一个指针 指向数据的起始位置
            let index = 0;
            //返回值是一个对象
            return {
                // 对象里有一个方法next()
                next: function () {
                    // 做判断   
                    if(array.length>index){
                        return {value:array[index++],done:false};
                    }else{
                        return {value:undefined,done:true};
                    }
                }
            }
        };
        
        let aa = myIterator(arr);
        console.log(aa.next());//{value: 11, done: false}
        console.log(aa.next());//{value: 22, done: false}
        console.log(aa.next());//{value: 33, done: false}
        console.log(aa.next());//{value: undefined, done: true}
        console.log(aa.next());//{value: undefined, done: true}
        
</script>

"for…of"是遍历器iterator的语法糖,所谓语法糖,简而言之就是一种接口,可以实现代码从面向过程到面向对象的转变。给我们带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。

写一个接口,用iterator来遍历对象。

<script>
	let obj = {name:'Lee',age:18,school:'北京大学'};

	//定义一个函数
	obj[symbol.iterator] = function(){
		//定义指针
		let index = 0;
		//将对象中的值一一取出 数组遍历取出每一个key
		let keys = Object.keys(this);

		//返回值是一个对象 对象中存在next()
		return {
			next:()=>{
				if(keys.length > index){
					return{value : this[keys[index++]],down : false};
				}else{
					return{value : undefined,down : true};
				}
			}
		}
	};
	let objInter = obj[symbol.intertor]();
	console.log(objInter.next());
	console.log(objInter.next());
	console.log(objInter.next());
	console.log(objInter.next());
</script>

(暂更新于2021.07.22 22:58 后续更新…)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:03:36  更:2021-07-23 11:04:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:48:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码