JavaScript编程进阶 – 迭代器

news2024/11/26 1:27:46

JavaScript编程进阶 – 迭代器

JavaScript Programming Advanced - Iterators

By Jackson@ML

在JavaScript语言中,迭代器是对象(Object), 它事先定义好了一个序列,并在其终止时有可能地(潜在地)返回值。

本文简要介绍迭代器对象如何运用,希望对读者有所帮助。

1. 迭代器

如果不能用到循环语句for … of, 那么迭代器对JavaScript编程来说,就显得至关重要。

JavaScript迭代器具有next()方法,用来实现 Iterator 协议的任意一个对象,该方法返回具有两个属性的对象:

1) value, 即迭代序列的下一个值;
2) done, 判断结果的值:

  • 如果迭代序列中最后一个值已经被消耗,则为true;
  • 如果value与done一起存在,则它是迭代器的返回值。

在JavaScript语言中,最常见的迭代器是Array迭代器。创建一个数组,那么它就按顺序返回关联数组中的每个值。

2. next()方法

JavaScript的迭代器,是可迭代对象;这个可迭代对象是具有Symbol.iterator的对象。

而Symbol.iterator则是一个返回next()方法的函数。

下列示例代码说明如何迭代可迭代对象:

// create a function
function numbers() {
    let n = 0;
    return {
        next: function() {
            n += 10;
            return {value:n, done: false};
        }
    };
}
// create iterable
const n = numbers();
let n1 = n.next().value;
let n2 = n.next().value;
let n3 = n.next().value;
console.log(n1);
console.log(n2);
console.log(n3);

执行结果如下图所示:
在这里插入图片描述

3. 构建范围迭代器

接下来,我们需要新建makeRangeIterator函数,来构建一个范围迭代器;它将传递三个参数,分别是起始值,最大值和间距。

1) 构建makeRangeIterator函数

这个makeRangeIterator函数构建代码如下所示:

function makeRangeIterator(start=0, end=Infinity, step=1) {
    let nextIndex = start;
    let iterationCount = 0;

    const rangeIterator = {
        next() {
            let result;
            if (nextIndex < end) {
                result = { value: nextIndex, done: false };
                nextIndex += step;
                iterationCount++;
                return result;
            }
            return { value: iterationCount, done: true };
        },
    };
    return rangeIterator;
}

创建以上的函数,可以通过反复调用next()方法,来显式地迭代一个迭代器对象。

通过迭代器迭代一次,所谓会“消耗”这个迭代器,因为通常只能执行一次。
在终止值被生成后,对next()的额外调用应当继续返回{ done: true }。

之所以创建范围迭代器,就是允许在简单范围内迭代,该迭代器定义从开始(包含)到结束(排除)间隔步长的整数序列。它的最终返回值是它创建的序列的大小(size),由变量iterationCount来跟踪。

2) 实现迭代

构建好后赋给一个const类型变量,实现一个奇数序列:

const iterator1 = makeRangeIterator(1, 10, 2);

前文讲过,在迭代器的next()方法中:

  • 假如结果为true, 则全部值被消耗(即无值可用);
  • 那么,如果有可用值,就必须对next()方法的done属性取非。这样一来,可以依照刚才构建的迭代器,实现全部数值的迭代。

代码如下所示:

const iterator1 = makeRangeIterator(1, 10, 2);
let result = iterator1.next();

while (!result.done) {
    console.log("The result is:", result.value);
    result = iterator1.next();
}
console.log("The size of iterated sequence is:", result.value);

在两部分代码写完后,执行代码结果如下图所示:
在这里插入图片描述
技术好文陆续推出,敬请关注。

您的认可,我的动力。😃

相关阅读:

  1. Javascript编程进阶 - 数组(Array)
  2. Javascript编程进阶 - 预定义函数
  3. Javascript编程进阶 - Return语句
  4. Javascript编程基础 - 闭包
  5. Javascript编程基础 - For循环
  6. Javascript编程基础 - 布尔值(Booleans)
  7. Javascript编程基础 - 对象
  8. Javascript编程基础 - 函数进阶
  9. Javascript编程基础 - 条件语句
  10. Javascript编程基础 - 函数入门
  11. Javascript编程基础 - 关键字Let, Const和Var的区别
  12. Javascript编程基础 - 变量
  13. Javascript编程基础 - 输出
  14. 用Visual Studio Code搭建JavaScript开发环境
  15. 安装最新版WebStorm来开发Javascript应用程序
  16. 用Visual Studio Code运行Javascript失败的解决办法

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

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

相关文章

收入支出记录,对需要的账目明细进行颜色标记

面对繁杂的账单和财务数据&#xff0c;你是否曾为记账而感到苦恼&#xff1f;别担心&#xff0c;我们为你带来了一款全新的记账软件——晨曦记账本&#xff0c;这不仅仅是一个简单的记账工具&#xff0c;更是你财务管理的得力助手。 所需工具&#xff1a; 一个【晨曦记账本】…

lora 生成图片 扭曲 的问题 【lora出图】

人物扭曲的原因&#xff1a; 生成图片是720X1080 而LORA制作的时候&#xff0c;图片大小为:512X512 所以生成图片时&#xff1a;设置为512X768 或512X512 生成图片大小以&#xff1a; 512X768 竖屏&#xff08;海报&#xff09; 768X512 横屏&#xff08;动画&…

Unity 如何打造”大厅+子游戏”架构

现在越来越多的手机游戏开始要做成大厅子游戏模式&#xff0c;简单的说就是&#xff0c;进入大厅后有很多子游戏&#xff0c;玩家选哪个完&#xff0c;就更新下载哪个子游戏&#xff0c;下次就直接进去玩子游戏就可以了。这就是现在要做的 “大厅子游戏”架构,要拿一套这样的架…

浙大链协2023年终总结

2 0 2 4 元旦 快乐 龙腾虎跃 01 引言 俗话说&#xff1a;"币圈一天&#xff0c;人间十年"&#xff0c;数字货币一天的涨跌可能抵上其他资产价格一年的波动幅度。而经历过漫长的熊市后&#xff0c;铭文的火爆十分生动地表述了这一口号...... 2023年&#xff0c;浙大链…

【Unity引擎技术整合】 Unity学习路线 | 知识汇总 | 持续更新 | 保持乐趣 | 共同成长

前言 本文对Unity引擎的知识进行了一个整理总结&#xff0c;基本包含了Unity中大部分的知识介绍。网上也有很多Unity相关的学习资料&#xff0c;但大多数都不成体系&#xff0c;学起来的时候难免会东奔西走的摸不着头脑。本文整理的多数文章都是有对应的系列性文章专栏&#x…

【C语言】Ubuntu 22上用GTK写GUI程序

一、GTK介绍 GTK (GIMP Toolkit) 是一个多平台的图形用户界面工具包。它最初是为图像处理程序 GIMP 开发的&#xff0c;后来演变成为许多操作系统上开发图形界面应用程序的通用库。GTK 是用C语言编写的&#xff0c;并且是自由和开源软件&#xff0c;遵循LGPL (GNU Lesser Gene…

x-cmd pkg | hyperfine - 命令行基准测试工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 hyperfine 是一个用于命令行基准测试的开源工具&#xff0c;可以对多次命令运行的时间进行分析&#xff0c;帮助开发人员评估和比较不同命令或脚本的性能。它是用 Rust 语言开发的&#xff0c;可以在 Windows、macOS …

Redis 与 Spring: 解决序列化异常的探索之旅

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【网络面试(5)】收发数据及断开服务器(四次挥手)

前面了解到服务器和客户端在创建套接字&#xff0c;建立连接后&#xff0c;就可以进入到下一步&#xff0c;双发可以互相发送和接收数据&#xff0c;本篇博客就来学习一下这个过程。  我们印象里&#xff0c;发送数据应该是我们在浏览器输入网址&#xff0c;敲击回车的一瞬间&…

RocketMQ 生产者源码分析:DefaultMQProducer、DefaultMQProducerImpl

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

(九)上市企业实施IPD成功案例分享之——欧普

LED通用照明应用是LED照明应用市场的第一驱动力&#xff0c;由于LED照明技术发展迅速&#xff0c;以及成本快速下降&#xff0c;已成为全球主流照明光源。近年来&#xff0c;通过将智能控制模块嵌入LED通用照明终端&#xff0c;形成了具有自动控制、系统化控制等功能的智能照明…

Java8 Lambda 表达式

文章目录 &#x1f349; Java 8 介绍&#x1f349; Lambda 表达式&#x1f345;&#x1f345; 基础语法&#x1f345;&#x1f345; 案例 &#x1f349; 函数式接口&#x1f345;&#x1f345; 内置的四大核心函数式接口&#x1f345;&#x1f345; 案例 &#x1f349; Java 8 …

linux驱动(一):led

本文主要探讨210的led驱动相关知识。 驱动 操作系统驱动硬件的代码,驱动上层是系统调用API,下层是硬件 宏内核&#xff1a;内核整体上为一个过程实现,运行在同一地址空间,相互调用简单高效 微内核&#xff1a;功能为独立过程,过程间通过IPC通信 …

国科大图像处理2023速通期末——汇总2017-2019

国科大2023.12.28图像处理0854期末重点 图像处理 王伟强 作业 课件 资料 一、填空 一个阴极射线管它的输入与输出满足 s r 2 sr^{2} sr2&#xff0c;这将使得显示系统产生比希望的效果更暗的图像&#xff0c;此时伽马校正通常在信号进入显示器前被进行预处理&#xff0c;令p…

上海亚商投顾:三大指数红盘收官!沪指今年累计跌3.7%

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 A股12月29日迎来2023年收官之战&#xff0c;三大股指延续反弹走势&#xff0c;最终集体红盘报收。纵观全年&am…

CMake入门教程【基础篇】CMake+vs2022+nmake构建项目

文章目录 1.vs编译器下载安装2.运行nmake测试3.CMake下载安装4.运行CMake测试5.使用CMakeNMake构建项目代码目录代码实现 6.运行项目 1.vs编译器下载安装 下载地址 :https://visualstudio.microsoft.com/zh-hans/vs/ 点击截图处下载 勾选红框的内容即可 安装 2.运行nmak…

echarts手动触发气泡的显示和隐藏

点击echarts图表后将点击的那个进行突出显示 <template><div id"demo"> </div><el-button type"primary" click"set">设置</el-button><el-button type"primary" click"cancel">取消&…

数据结构与算法教程,数据结构C语言版教程!(第二部分、线性表详解:数据结构线性表10分钟入门)四

第二部分、线性表详解&#xff1a;数据结构线性表10分钟入门 线性表&#xff0c;数据结构中最简单的一种存储结构&#xff0c;专门用于存储逻辑关系为"一对一"的数据。 线性表&#xff0c;基于数据在实际物理空间中的存储状态&#xff0c;又可细分为顺序表&#xff…

嵌入式视频播放器(mplayer)

1.文件准备&#xff1a; MPlayer-1.0rc2.tar.bz2 libmad-0.15.1b.tar.gz 直接Git到本地 git clone https://gitee.com/zxz_FINE/mplayer_tarball.git 2.文件夹准备&#xff1a; src存放解压后的源码文件&#xff0c;target_Mplayer存放编译安装的目标文件 mkdir src targe…

自动驾驶论文

文章目录 一、Convolutional Social Pooling for Vehicle Trajectory Prediction二、QCNet&#xff1a;Query-Centric Trajectory Prediction三、VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation 一、Convolutional Social Pooling for Vehicl…