为链表数据结构实现iterator接口
2019-01-22 02:00:14来源:博客园 阅读 ()
iterator作用
为所有的数据结构提供统一的访问方式。
接口对象
接口对象一共有3个方法,next()方法、return()方法、throw()方法。
next() 必填
用于for..of迭代。
该方法返回一个对象{value,done}。 value:元素值,done:状态位,用于指定循环是否结束。
return() 可选
用于break语句,或出错结束循环。
throw() 可选
throw方法主要是配合 Generator 函数使用
接口实现
通过内置Symbol.iterator属性来实现接口,该接口主要是返回一个对象指针,然后通过调用接口对象的next方法来实现访问下一个元素值。
具备iterator接口的对象
1:数组
2:字符串
3:函数的 arguments 对象
4: Set/Map 数据结构
5:TypedArray
6:NodeList 对象
接口调用
1:手动调用。
2:for..of语句
3:... (扩展运算符)
特点
for...of循环还有一个特点,就是会正确识别 32 位 UTF-16 字符
实例代码
class Node { constructor(value) { this.value = value; this.next = null; } } class Link { /** * 构造函数 */ constructor(value) { this.head = new Node(value); } /** * 插入 * @param {any} value * @param {any} item */ insert(value, item) { let node = new Node(value); let current = this.find(item); node.next = current.next; current.next = node; } /** * 查询节点 * @param {any} item * @returns {Node} */ find(item) { let current = this.head; while (current && current.value != item) { current = current.next; } return current; } /** * iterator接口实现 */ [Symbol.iterator]() { let current = null, target = this; return { next() { current = current != null ? current.next : target.head; if (current != null) { return { value: current.value, done: false }; } return { value: undefined, done: true }; }, return() { return { done: true } } } } }
let l = new Link(0); l.insert(2, 0); l.insert(5, 2); l.insert(3, 2); // 到2的后面插入一个3 // for..of 方式调用接口 for (let o of l) { console.log(o); } // 扩展运算符调用接口 console.log(...l); // 手动调用。 // 获取接口对象 let iter = l[Symbol.iterator](); // 调用next 方法 console.log(iter.next()); console.log(iter.next()); console.log(iter.next());
源码下载:https://pan.baidu.com/s/1sASqhXzIC94ae-SYYv0CAg
我的百度经验:https://jingyan.baidu.com/article/b7001fe1c5a1240e7282dd8b.html
原文链接:https://www.cnblogs.com/whnba/p/10298016.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Iframe 高度自适应
下一篇:ES6第一节:开发环境的搭建
- js防止表单重复提交实现代码 2020-03-29
- 基于JQuery的多标签实现代码 2020-03-29
- js实现翻页后保持checkbox选中状态的实现方法 2020-03-25
- NiftyCube实现圆角边框的方法 2020-03-20
- JS实现标签页切换效果 2020-03-12
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash