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

为链表数据结构实现iterator接口的更多相关文章

  1. Iterator接口(遍历器)和for/of循环

    在javascript中表示“集合”的数据结构,主要有Array,Object,Map,Set. Iterator(遍历器)接口是为各种不同的数据结构提供了统一的访问机制.任何数据结构具有Iterat ...

  2. JAVA笔记17-容器之一 图、Collection接口、Iterator接口(重要)

    掌握1136: (1)1个图 (2)1个类:Collections (3)3个知识点:For(了解),Generic泛型,Auto-boxing/unboxing(自动打包/解包) (4)6个接口:C ...

  3. < java.util >-- Iterator接口

    每一个集合都有自己的数据结构,都有特定的取出自己内部元素的方式.为了便于操作所有的容器,取出元素.将容器内部的取出方式按照一个统一的规则向外提供,这个规则就是Iterator接口. 也就说,只要通过该 ...

  4. Java API ——Collection集合类 & Iterator接口

    对象数组举例: 学生类: package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private St ...

  5. Iterator接口(迭代器)

    目录 前言 原理 方法 异常 Iterator接口(迭代器) 前言 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象, ...

  6. Java容器深入浅出之Collection与Iterator接口

    Java中用于保存对象的容器,除了数组,就是Collection和Map接口下的容器实现类了,包括用于迭代容器中对象的Iterator接口,构成了Java数据结构主体的集合体系.其中包括: 1. Co ...

  7. Java中的Enumeration、Iterable和Iterator接口详解

    前言 在看各类Java书籍或者博文的时候,总是会遇到Enumeration.Iterable和Iterator这三个接口,如果对这几个接口不是很明白的话,总会让自己看着看着就迷惑了,正好这周末,抽空把 ...

  8. java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式

    集合 ArrayList 丑数: 能被3,5,7整除多次, ArrayList     list 接口             | - ArrayList             | - Linked ...

  9. Java集合【2】--iterator接口详解

    目录 一.iterator接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 3.2.1 SpitIte ...

随机推荐

  1. 大叔学ML第一:梯度下降

    目录 原理 实践一:求\(y = x^2 - 4x + 1\)的最小值 实践二:求\(z = x^2 + y^2 + 5\)的最小值 问答时间 原理 梯度下降是一个很常见的通过迭代求解函数极值的方法, ...

  2. HTTP 协议常见首部字段

    首部字段 1.HTTP协议的请求和响应报文中必定包含HTTP首部.首部内容为客户端和服务器处理请求和响应提供了所必须的信息. 2.HTTP首部字段是由首部字段名和字段值构成,中间用冒号“:”隔开.字段 ...

  3. 小程序上传wx.uploadFile - 小程序请假

    小程序上传wx.uploadFile UploadTask wx.uploadFile(Object object) 将本地资源上传到服务器.客户端发起一个 HTTPS POST 请求,其中 cont ...

  4. FF中flash滚轮失效的解决方案

    概述 在FF浏览器中有这样一个bug,就是当鼠标hover在flash区域的时候,滚轮会失效.原因是ff浏览器没有把滚轮事件嵌入到flash里面去.如果这个flash很小的话,比如直播的视频,会很容易 ...

  5. Jquery Ajax Realize whether the user is registered

    XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据. XMLHt ...

  6. Robot Framework - 一些练习

    01 - 安装Robot Framework TA环境 根据系统请选择对应的版本包来安装,下面是以Win7-64bit系统为例,来说明如何搭建一个可以运行练习三test case的RF TA环境. 1 ...

  7. 请求被中止: 未能创建 SSL/TLS 安全通道

    出现“请求被中止: 未能创建 SSL/TLS 安全通道.”的问题. 在创建请求地址的前面加了这句代码就可以了 System.Net.ServicePointManager.SecurityProtoc ...

  8. Jenkins系列之六——拉取指定branch或tag

    一.安装插件 Build With Parameters Git Paramet 系统管理——>管理插件——>可选插件——>右上角过滤框中输入上面两个插件的名字——>直接安装 ...

  9. #21 Python异常

    前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误).IndexError(索引错误).NameError(变量错误).SyntaxError(语法错误).Indentati ...

  10. [转]Rabbitmq的使用及Web监控工具使用

    本文转自:https://blog.csdn.net/xingxing513234072/article/details/51014850 一.文档资料        1.官方网站:http://ww ...