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

只要某个数据结构部署了Iterator接口,就可以使用拓展运算符将其转化为数组。

let arr = [...iterator];

var str = ‘hello‘;
[...str]  //["h", "e", "l", "l", "o"]

yield* 后面跟的是一个可遍历的结构,它会调用该结构的遍历器接口。

let generator = function* (){
    yield 1;
    yield* [2,3,4];
    yield 5;
}
var it = generator();
it.next();  //{value: 1, done: false}
it.next()   //{value: 2, done: false}
it.next()   //{value: 3, done: false}
it.next()   //{value: 4, done: false}
it.next()   //{value: 5, done: false}
it.next()   //{value: undefined, done: true}

数组的遍历会调用遍历器接口,所以任何接受数组作为参数的场合,其实都调用了Iterator接口,如下:

for/of    Array.from()   Map()    Set()   WeakMap()   WeakSet()  Promise.all()  Promise.rece()

1,字符串的Iterator接口

var str = ‘hi‘;
typeof str[Symbol.iterator]    //‘function‘

var a = str[Symbol.iterator]();
a.next()   //{value: "h", done: false}
a.next()   //{value: "i", done: false}

[...str]     //["h", "i"]

以前字符串转化为数组:str.split(""),ES6中可以使用Iterator进行遍历加入数组中,相当简洁。

原文地址:https://www.cnblogs.com/tangjiao/p/9046429.html

时间: 2024-08-04 05:09:08

Iterator接口(遍历器)和for/of循环的相关文章

跟王老师学集合(三):使用Iterator接口遍历集合元素

使用Iterator接口遍历集合元素 主讲人:王少华  QQ群号:483773664 学习目标: 1 掌握使用Iterator接口遍历集合元素 一.Iterator概述 Iterator接口主要用于遍历,因此Iterator对象也被称为迭代器.Iterator接口里定义了如下三个方法: boolean hasNext():如果被迭代的集合元素还没有被遍历,则返回true Object next():返回集合里下一个元素 void remove():删除集合里上一次next方法返回的元素 二.利用

源码剖析Iterator接口遍历和直接for-get组合遍历的区别

经常使用ArrayList遍历,尝试总结一下for配合get()的遍历和Iterator配合next()遍历的区别,进入Java的JDK源码中进行深度剖析一下 这里参考一下http://bbs.csdn.net/topics/250025827论坛的测试程序: import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.LinkedList; /** * Iterat

Iterator 遍历器

1.遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). 2.Iterator的作用有三个:一是为各种数据结构,提供一个统一的.简便的访问接口:二是使得数据结构的成员能够按某种次序排列:三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费. 3.在ES6中,有些数据结构原生具备Iterator接口(比如数组),即不用任何处理,就

遍历器接口

Symbol是种新的数据类型,表示独一无二,通常用于定义对象的属性名,[Symbol()].一.什么是遍历器接口?一个数据结构有遍历器接口的特征是:它有Symbol.iterator属性,它有next()方法,返回一个包含value和done属性的对象.原生具备遍历器接口的数据结构:Array,Map,Set,String,TypedArray,函数的arguments对象,NodeList对象. //遍历数组 const arr = [1,2,3,4,5]; var a = arr[Symbo

遍历器 for...of 循环

for...of 作为遍历所有数据结构的统一的方法,但不能直接遍历对象,因为没有 Symbol.iterator 遍历器接口 (所以可用 Object.keys( ) / Object.values( ) 去转一道,转成数组就可以用了.或者给obj [ Symbol.iterator ] = function( ){ ... }) ary.key( )  拿到数组的下标 value( )  拿到的是数组的每个值 entries( )  拿到的是:[ 下标,值 ]  这个样的一个形式的所有的数据.

数据持久化、单例、重载【添加对不可访问的成员的操作】、魔术方法、类常量、static关键字对self的补充【静态延迟绑定实现$this的效果】、参数类型约束【参数前加类名】、遍历【iterator接口】、快速排序

1.数据持久化过程[传输(例如表单提交或php交互mysql)和保存过程] 使用的是字符串形式的流数据. 数据流就是为了传输[按照序列的形式进行传输] [http://baike.baidu.com/link?url=0MtUQMhFzc_EwJc09rXZV8KlfOL4jis6XNbRfmGA3rQhDcGwOp8togLVQjXBV34M] 所以将其他类型数据转化为字符串的过程也是序列化的过程 [这个概念和图片.视频的流媒体的区别?] [注意点] 另外mysql中sql语句中的某些关键词为

增强for循环、Map接口遍历、可变参数方法

增强for循环 1.for循环能做得事情,增强for循环大部分都能做(如果要想获得下标的时候就必须使用简单for循环了) 2.增强for有时候能够方便的处理集合遍历的问题,但是集合的标准遍历是使用迭代器 3.在集合框架中体现出了它的强大之处 Map接口遍历 Map接口的遍历: 1.第一种方法 使用map.values()方法,先把value的值都放在一个Collection集合中. 2.第二种方法 使用map.entrySet()方法(推荐使用) 3.第三种方法 使用map.keySet()方法

C++迭代器/遍历器 iterator实现

1.原理 迭代器又称为遍历器,用于访问容器中的数据,迭代器旨在算法和容器之间搭建访问的桥梁,从而使算法和数据分离,不用关心数据具体的存储细节.具体的原理描述请参考以下两个博客: [1].C++迭代器 iterator [2].Iterator模式C++实现 迭代器的UML图: (来自:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/25/1764934.html) 2.实现 根据以上的原理图,下面实现一个简单的迭代器. /* * 以下实现了

第十二章 遍历器

遍历器(Iterator)的作用是按照指定的顺序来访问一个集合中的所有元素,而不需要了解集合的详细数据结构. 1 概述 1.1 foreach语句 这种遍历方式对任何类型的数据都适用,因为所有数组都继承了.NET类库中定义的类System.Array,而该类继承了接口IEnmerable.在C#中,如果某个类型继承了接口IEnumerable,或者继承了泛型接口IEnumerable<T>,或者继承了泛型接口IEnumerable<T>的任何一个构造类型,那么称该类型是“可枚举的”