js迭代器iterator

js迭代器iterator,第1张

iterator(迭代)一般很少直接使用, 但是却是很常用很重要的功能

例如 :

对象的扩展运算符()内部其实是调用了 Iterator 接口。

在es6 中统一了遍历的接口 Iterator,Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即forof循环。

字符串也可以使用扩展运算符

rest运算符, 与扩展运算符是逆运算

扩展运算符:数组=>分割序列

rest运算符:分割序列=>数组

rest可以代替arguments变量

回到主题, 迭代

Symboliterator 为每一个对象定义了默认的迭代器。

当需要对一个对象进行迭代时(比如开始用于一个 forof 循环中),它的 @@iterator 方法都会在不传参情况下被调用,返回的 迭代器 用于获取要迭代的值。

一些内置类型拥有默认的迭代器行为,其他类型(如 Object )则没有。下表中的内置类型拥有默认的 @@iterator 方法:

更多信息请参见 迭代协议 。

js中对象分为可迭代和不可迭代 如果是可迭代哪它就会有一个[Symboliterator] 函数

这个函数就是对象的迭代器函数,如用for of 如果遍历的对象没有这个迭代方法那么就会报错

for of 传入的是可迭代对象,但是如何吧一个不可迭代的对象变为可迭代的对象呢!很简单就是自己写一个[Symboliterator]函数。

你以为迭代就这么简单的结束了吗现在再讲一个新东西 yield

yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字。

yield关键字实际返回一个IteratorResult(迭代器)对象,它有两个属性,value和done,分别代表返回值和是否完成。

yield无法单独工作,需要配合generator(生成器)的其他函数,如next,懒汉式 *** 作,展现强大的主动控制特性。

yield 自定义一个迭代器

function () {} 这种函数名字叫 generator函数, 生成器函数, 下一篇再重点讲这个哈

一种自动迭代的更优雅的实现是使用 for循环

在Python中,迭代器(Iterator)和可迭代(iterable)的区别是,迭代器支持 iter ()和 next ()方法;可迭代支持 iter ()方法。可迭代只能在for循环中获得元素,迭代器还可以用next()方法获取元素。

list/truple/map/dict都是可迭代,但不是迭代器;这些数据的大小是确定的;迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步。

凡是可以for循环的,都是Iterable

凡是可以next()的,都是Iterator

建议使用迭代器的hasNext()方法进行判断:

使用next()方法时,如果迭代器已经结束,会直接抛出NoSuchElementException异常:

我以获取迭代器遍历Map为例:

这是以前遍历map的标准写法之一。

或者换一种方式:

以上代码为:

public class Main {

public static void main(String[] args) {

Map<String, String> map = new HashMap<>();

mapput("1", "a");

mapput("2", "b");

mapput("3", "c");

Iterator<MapEntry<String, String>> iterator = mapentrySet()iterator();

while (iteratorhasNext()) {

MapEntry entry = iteratornext();//获取next()对象

Systemoutprintln("key:" + entrygetKey() + " - value:" + entrygetValue());

}

Systemoutprintln("");

Iterator<MapEntry<String, String>> iterator2 = mapentrySet()iterator();

while (true) {//创建死循环

boolean flag = iterator2hasNext();//获取hasNext()的值

Systemoutprint(flag + " ");

if (!flag) {//当hasNext()为false时跳出死循环

Systemoutprintln("跳出死循环");

break;

}

MapEntry entry = iterator2next();//获取next()对象

Systemoutprintln("key:" + entrygetKey() + " - value:" + entrygetValue());

}

}

}

运行结果:

有如下几种写法:

vector<int>::iterator it;

it = abegin()+4;

it = advance(abegin(), 4);

it = next(abegin(), 4);

以上就是关于js迭代器iterator全部的内容,包括:js迭代器iterator、Python中的迭代器与可迭代:iter()和next()、迭代器的next()方法返回一个对象,如果返回的对象值为null,表示已经到了迭代器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9563358.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存