ES6:可迭代对象(Iterable object)

一、概念

可迭代对象是数组的泛化,是定义了内置迭代器方法 Symbol.iterator 的对象。是可以在for..of 循环中使用的对象。

二、迭代器(iterator)

为了让对象可以迭代,我们需要给对象添加一个迭代器--Symbol.iterator。

迭代器是一个包含next()方法的对象,next()是一个需要自定义的方法,用于定义每次调用时应返回的值和是否完成迭代的条件。

例如:

<script>let range = {a: 1,b: 5,};// 1. for..of 调用首先会调用这个:range[Symbol.iterator] = function () {// 返回迭代器对象(iterator object):// 2. 接着定义next() 方法return {current: this.a,last: this.b,// 3. next() 在 for..of 的每一轮循环迭代中被调用next() {// 4. 它将会返回 {done:.., value :...} 格式的对象if (this.current <= this.last) {return { done: false, value: this.current++ };} else {return { done: true };}},};};// 现在它可以运行了!for (let num of range) {console.log(num); // 1 2 3 4 5}</script>

也可以将对象自身作为迭代器,例如:

  <script>let range = {a: 1,b: 5,[Symbol.iterator]() {this.current = this.a;return this;},next() {if (this.current <= this.b) {return { done: false, value: this.current++ };} else {return { done: true };}},};for (let num of range) {console.log(num); // 1 2 3 4 5}</script>

三、轻松遍历可迭代对象

当一个对象可迭代,我们就可以使用扩展运算符(...)或者Array.from()进行遍历

例如:

  <script>let range = {a: 1,b: 5,};range[Symbol.iterator] = function () {return {current: this.a,last: this.b,next() {if (this.current <= this.last) {return { done: false, value: this.current++ };} else {return { done: true };}},};};console.log(Array.from(range)); //[1, 2, 3, 4, 5]console.log([...range]); //[1, 2, 3, 4, 5]</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS(鸿蒙)不再适合JS语言开发

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以以更简洁、…

OpenvSwitch VXLAN 隧道实验

OpenvSwitch VXLAN 隧道实验 最近在了解 openstack 网络&#xff0c;下面基于ubuntu虚拟机安装OpenvSwitch&#xff0c;测试vxlan的基本配置。 节点信息&#xff1a; 主机名IP地址OS网卡node1192.168.95.11Ubuntu 22.04ens33node2192.168.95.12Ubuntu 22.04ens33 网卡信息&…

通过键盘对机械臂进行操作

1 #include<myhead.h>2 #include<linux/input.h>3 #define SER_PORT 88884 #define SER_IP "192.168.116.225"5 #define CLI_PORT 99996 #define CLI_IP "192.168.65.129"7 int main(int argc, const char *argv[])8 {9 //1、创建用于连接…

28.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据推测结果用提示框的形式显示

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;27.数据推测功能…

Pytorch NLP入门3:用嵌入表示单词

初次编辑时间&#xff1a;2024/3/17&#xff1b;最后编辑时间&#xff1a;2024/3/17 本栏目链接&#xff1a;https://blog.csdn.net/qq_33345365/category_12597850.html 本人的其他栏目&#xff1a; pytorch 基础的栏目链接&#xff1a;https://blog.csdn.net/qq_33345365/…

便利店小程序有哪些功能

​便利店小程序为附近的住户提供小程序在线购物的服务。用户只需要打开小程序&#xff0c;就可以购买需要的商品&#xff0c;可以选择自取或者配送。整个过程非常简单快速。下面具体介绍便利店小程序的功能。 1. **商品展示**&#xff1a;展示便利店的商品信息&#xff0c;包括…

快速幂算法详解

一、引言 快速幂算法是数学和计算机科学中用于大数幂运算的一种高效算法。它采用了二进制分治策略&#xff0c;将幂运算分解为更小的部分&#xff0c;从而显著降低运算的时间和空间复杂度。在处理大规模数幂运算、加密算法和某些数学问题时&#xff0c;快速幂算法显示出其卓越…

贪心算法题解

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这篇文章将给大家介绍贪心算法和贪心算法题目的练习和解析&#xff0c;贪心算法的本质就是每一个阶段都是局部最优&#xff0c;从而实现全局最优。我们在做题的同时&#xff0c;不仅要把题目做出来&#xff0c;还要有严格的证…

9 个顶级免费视频压缩软件精选

视频有多种格式、不同的大小和不同的压缩级别。但是&#xff0c;您可以使用最好的视频压缩器来&#xff1a; 减小文件大小提高压缩质量更好地服务您的观众 我们将列出九个领先的视频压缩软件精选&#xff0c;您今天可以免费使用它们来增强您的视频。 9 个顶级免费视频压缩器精…

PHP8编译安装

CentOS8编译安装PHP8 PHP&#xff0c;全称Hypertext Preprocessor&#xff08;超文本预处理器&#xff09;&#xff0c;是一种通用开源脚本语言。它特别适合于web开发&#xff0c;并能嵌入HTML中。现在主要用于PHP网站中实现动态网站功能&#xff0c;常规我们使用nginx、apache…

【黑马程序员】Python综合案例

文章目录 数据分析案例目的需求数据准备实践数据记录类 文件解析解析csv格式解析json文件 进行数据计算读取文件数据按日期累加数据 图表展示图标绘制最终效果展示 数据分析案例 目的 文件操作实践json库使用三方库pyecharts使用面向对象实践数据容器使用 需求 给定一个csv…

保存带 numpy.ndarray 的 dataframe

# 创建 DataFrame texts ["hi", "hello", "you"] embeddings [np.random.randn(10,) for i in range(3)] df pd.DataFrame({"text":texts, "embedding":embeddings})type(df.embedding.values[0]) # numpy.ndarray# 保存…

设计模式之外观模式(Facade Pattern)【结构性模式】

为什么用结构性模式&#xff1f; 结构性模式关注点“怎样组合对象/类&#xff1f;”所以我们关注下类的组合关系类结构型模式关心类的组合&#xff0c;由多个类可以组合成一个更大的&#xff08;继承&#xff09;对象结构型模式关心类与对象的组合&#xff0c;通过关联关系在一…

Hadoop大数据应用:HDFS 集群节点缩容

目录 一、实验 1.环境 2.HDFS 集群节点缩容 二、问题 1.数据迁移有哪些状态 2.数据迁移失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xff08;已部署&#xff09; SecondaryNameNode &#xff08;已部署…

ChatGPT学术论文润色的方法与步骤教程

GPT学术论文润色方法 请查看视频详细润色步骤 把ChatGPT运用到论文写作翻译润色&#xff0c;绝对是仰首佩服&#xff0c;莫敢与争啊&#xff0c;分分钟碾压最顶级的传统翻译或润色模式。 因为&#xff0c;正正好是撞在ChatGPT最擅长的领域上了&#xff01; 正如我们所知&…

异常随笔xx1

关于过滤器和拦截器 看一下过滤器&#xff0c;过滤器我们可以分两步&#xff1a; 1.配置自定义过滤器 2.过滤器注册 这样它才会生效&#xff0c;拦截器也如此 先配置&#xff1a; RequiredArgsConstructor public class UserTransmitFilter implements Filter {private f…

裁员潮下,打工人的自我修养

法律规定的 裁员补偿&#xff1a; 1、平等协商解除的&#xff0c;底线是N1&#xff0c;上限能谈多少法律都支持 2、有客观原因解除的&#xff0c;是N1 3、强制违法辞退的&#xff0c;是2N Tips&#xff1a;基数是每月的全额税前工资&#xff0c;包括奖金绩效等&#xff0c…

vue框架渲染原理

Vue.js&#xff0c;作为当前最受欢迎的前端框架之一&#xff0c;以其轻量级和灵活性受到众多开发者的喜爱。Vue的核心理念在于采用数据驱动和组件化的方式来构建用户界面。为了更好地使用Vue及其丰富的生态系统&#xff0c;理解其背后的核心原理是非常重要的。本文将深入探讨Vu…

Java 测试Thread StackOverflowError

测试堆栈溢出 Testpublic void testStackOverflow() {try {foo1();} catch (Throwable throwable) {// 栈满时&#xff0c;打印递归深度System.out.println(countRecursion);throw throwable;}}public void foo1() {countRecursion;foo1();}JVM option Xmx50mXss20m 线程栈大小…

strstr的模拟实现

一&#xff1a;strstr函数的定义&#xff1a; strstr函数功能的解释&#xff1a; 在一个字符串里面寻找另一个字符串的首次出现位置&#xff0c;返回值为该位置。 strstr函数要点&#xff1a; 1&#xff0c;如果 str2 是 str1 的一部分&#xff0c;它返回一个指向 str1 中 …