常见类型-3:数组元组的方法

简介: 本实验将介绍TypeScriptvs数组元组的方法

常见类型-3:数组元组的方法

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

在实验室页面,单击创建资源。

(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. 进入VNC实验环境

进入网页环境

1.1 资源创建成功后,我们在右侧选择切换到远程桌面

1.2 在远程桌面页面中,点击Chromium网页浏览器

登录RAM用户

2.1 浏览器启动后会默认打开阿里云的RAM用户登录页。在登录页面中我们点击下一步按钮。

2.2 接下来我们需要输入RAM用户的密码。密码显示在实验控制台左侧,我们点击子用户密码右侧的复制按钮。

复制完成后,我们在用户密码框中按Ctrl + V 复制密码,然后点击登录按钮

进入ECS的远程连接。

3.1 登录成功后,页面跳转到控制台,我们在控制台的搜索框中输入ECS,然后点击云服务器ECS进入云服务器控制台。

3.2 在ECS控制台中,我们找到实验创建的ECS,点击右侧的远程连接按钮。

3.3 在远程连接中选择通过VNC远程连接中的立即登录如果没有显示该选项,则可点击展开其他登录方式按钮。

登录VNC远程连接

4.1 初次登录VNC远程连接时需要先设置VNC密码。点击重置VNC密码按钮。

4.2 输入两次新的VNC密码,并点击确认

4.3 VNC密码设置成功后,输入密码并点击确认。

4.4 VNC登录成功后会看到实验ECS的登录界面。

3. 常用方法1

在前面得实验中,我们讲解了数组和元组基本用法,在学习得过程中我们了解到,数组和元组本质上都是原生JavaScript数组得一种封装。因此数组和元组无论是使用,还是内置方法基本都大同小异。在本节实验中。我们将以数组为例,继续学习数组和元组得内置方法。

查找元素

首先我们来看比较简单的includes方法。他的作用只是判断数组中是否包含特定元素。我们修改index.ts文件为如下内容

var arr:number[] = [1, 2, 1, 2, 3, 2, 1];
console.log(arr.includes(0))
console.log(arr.includes(2))

终端选项卡输入如下命令编译并查看。

tsc
node index.js

定位元素

在数组中也提供了查询元素得方法indexOflastIndexOf。这两个方法得参数和string也比较相似,indexOf为从前往后查找第一个出现的元素,lastIndexOf为从前往后查找第一个出现的元素。

该函数的参数分别是需要查找得元素,和开始查找得位置。如果找到了元素该函数的返回值为元素的下标,如果没有找到元素则返回-1。我们修改index.ts文件为如下内容

var arr:number[] = [1, 2, 1, 2, 3, 2, 1];
console.log(arr.indexOf(2, 0))
console.log(arr.indexOf(2, 3))
console.log(arr.lastIndexOf(2, 0))

终端选项卡输入如下命令编译并查看。

tsc
node index.js

子数组

通过数组中得slice方法,我们可以根据源数组中一部分元素,构建一个新的数组。需要注意的是,这里数组的slice方法和字符串的逻辑相似,都是并不改变原对象的内容,而是创建新内容。

slice方法有时候会和indexOf方法共同使用。下面的例子中:学校学生的信息以数组的形式排列,每个学生所包含元素长度是固定的,当我们想获得某个学生的信息的时候,我们就可以先查找学生的名字,然后截取属于这个学生的全部元素。我们修改index.ts文件为如下内容

var arr:string[] = ["张三", "汉族", "李四", "回族", "王五", "满族"];
var i:number = arr.indexOf("李四", 0);
console.log(arr.slice(i, i + 2))

终端选项卡输入如下命令编译并查看。

tsc
node index.js

4. 常用方法2

数组连接

接下来我们来看数组连接方法concat。这个方法可以将多个数组连接在一起,比较类似于string中的+运算符。这里需要注意的是,数组的concat方法的逻辑和字符串类似,也就是调用该函数不会对源数组的内容造成影响。

在这里我们使用元组来演示案例,该案例的逻辑上上一个小节的案例相反,是将多个用户的元组信息拼接在一起。在拼接完成之后,我们会发现concat在拼接完成后会生成一个新的元组,而原本的元组中的数据并没有被改变。我们修改index.ts文件为如下内容

var tunple:[string, string, number] = ["张三", "汉族", 19];
var users = tunple.concat(["李四", "回族", 20], ["王五", "满族", 18]);
console.log(tunple);
console.log(users);

终端选项卡输入如下命令编译并查看。

tsc
node index.js

元素拼接

在之前的字符串实验中我们讲解过了split方法,该方法可以通过分隔符将一个字符串拆分成字符串数组。而在数组中则包含了一个和split函数相反的方法join。这个方法可以将一个数组通过分割符号拼接成一个字符串。

我们继续通过上面的案例进行演示,将已经连接好的数组生成字符串。

var tunple:[string, string, number] = ["张三", "汉族", 19];
var users = tunple.concat(["李四", "回族", 20], ["王五", "满族", 18]);
console.log(tunple);
console.log(users);
console.log(users.join(","))

终端选项卡输入如下命令编译并查看。

tsc
node index.js

数组反序

数组反序的方法reverse的功能比较简单,也就是将数组[1,2,3]变成[3,2,1]。需要注意的是该方法执行之后不会生成新的数字,而是会修改源数组的内容。

这里我们看这样一个例子,在某些情况下,我们需要将输入的域名反序,比如将www.aliyun.com变成com.aliyun.www。这时候我们就可以组合使用splie,reverse,join函数来完成这个功能。我们修改index.ts文件为如下内容

var url:string = "www.aliyun.com"
var arr:string[] = url.split(".")
arr.reverse();
console.log(arr.join("."))

终端选项卡输入如下命令编译并查看。

tsc
node index.js

5. 任意位置修改

在之前的实验中,我们学习了pushpop等顺序修改数组元素的方法。这些方法都属顺序修改方法,也就是只能在指定位置对数组中的元素进行编辑,除此之外数组中还有一种方法splice。可以对数组的任意位置进行编辑。在本小节中我们就来学习这个方法的使用。

任意插入

首先我们来学习,任意插入的用法。splice函数插入元素的调用格式为splice(插入的位置,0,要插入的元素列表)。我们修改index.ts文件为如下内容。

var arr:string[] = ["元素1", "元素2", "元素3", "元素4"];
arr.splice(2, 0, "插入1", "插入2");
console.log(arr);

终端选项卡输入如下命令编译并查看结果。

tsc
node index.js

任意删除

除了插入之外,我们还可以通过splice方法在数组的任意位置删除元素。接下来我们再来看删除元素的用法,删除元素的调用格式为splice(需要删除的位置,需要删除的元素的个数),我们在上面例子的基础上继续编辑,我们修改index.ts文件为如下内容。

var arr:string[] = ["元素1", "元素2", "元素3", "元素4"];
arr.splice(2, 0, "插入1", "插入2");
console.log(arr);
arr.splice(3, 2);
console.log(arr);

终端选项卡输入如下命令编译并查看。会看到位置3后面两个元素被删除了。

tsc
node index.js

任意替换

splice方法除了可以实现插入和删除之外,还可以用于数组元素的替换。替换的调用格式为splice(需要替换的位置,被替换的元素的个数,替换上去的元素列表)

实际上splice方法的含义就是在任意位置替换,而添加和删除只是替换的一种特殊形式。当我们插入时实际上是用需要插入的元素列表在指定位置替换0个元素。而删除则是将指定位置需要删除的元素替换成0个元素。我们修改index.ts文件为如下内容。

var arr:string[] = ["元素1", "元素2", "元素3", "元素4"];
arr.splice(1, 3, "替换1", "替换2");
console.log(arr);

终端选项卡输入如下命令编译并查看。会看到位置1后面的3个元素被替换了。

tsc
node index.js

6. 数组排序

最后我们再来学习数组中另一个非常重要的方法,也就是排序。数组排序是一个非常常见的数据结构算法,在TypeScript中,提供了sort方法进行排序操作。在本小节我们来学习排序和回调函数的知识。

数组的排序

在使用sort方法时,我们需要提供了比较两个元素大小的回调函数。我们尝试来排序一组生日字符串,首先我们生成一个排序比较函数age,在该函数中我们使用string的localeCompare方法进行字符串的比较。接下来我们使用sort函数进行排序。我们修改index.ts文件为如下内容。

var arr:string[] = ["2000-08-03", "1985-07-06", "1954-01-18", "1985-11-26", "1977-01-19", "1985-07-06"]
function age(first:string, second:string):number{
    return first.localeCompare(second);
}
arr.sort(age)
console.log(arr)

终端选项卡输入如下命令编译并查看。会看到调用sort方法之后,数组中元素的顺序被改变了。

tsc
node index.js

比较回调函数

接下来我们来看一下sort中的回调函数的编写方法。根据sort函数的定义,sort函数在排序是会多次调用比较回调函数,在调用的时候,会将数组中的2个元素作为参数传给比较函数,如果我们认为参与比较的两个参数中,第一个参数应该放在第二个参数的后面,那么就返回一个正数,如果第一个参数放在第二个参数的前面就返回一个负数,如果两者相等就返回0。

接下来我们使用一个变量来保存localeCompare的返回值,然后将两个参数和返回值进行输出。在输出结果中,我们发现sort函数一共执行了11次比较函数,在比较函数中第一个参数的日期大则返回了1,第一个参数小返回了-1。相等返回了0。我们修改index.ts文件为如下内容。

var arr:string[] = ["2000-08-03", "1985-07-06", "1954-01-18", "1985-11-26", "1977-01-19", "1985-07-06"]
function age(first:string, second:string):number{
    var n:number = first.localeCompare(second);
    console.log("第一个参数:" + first + " 第二个参数:" + second + " 比较结果:" + n)
    return n;
}
arr.sort(age)
console.log(arr)

终端选项卡输入如下命令编译并查看。

tsc
node index.js

降序排序

在上面的例子中,我们的日期是按照从小到大的顺序进行排序。如果我们希望日期按照从大到小降序排序,我们可以修改排序中的比较函数。根据比较函数的返回值要求,如果第一个参数小则需要将他放在后面,这时返回负数,反之第一个参数大则将他放在前面,返回正数。如果相等则返回0不变。

这时我们就可以使用一个数学技巧,我们将正序排序比较函数的返回值取负数,这样最终结果就会满足我们期望要求,将数组降序排序。我们修改index.ts文件为如下内容。

var arr:string[] = ["2000-08-03", "1985-07-06", "1954-01-18", "1985-11-26", "1977-01-19", "1985-07-06"]
function age(first:string, second:string):number{
    return first.localeCompare(second);
}
function ageDesc(first:string, second:string):number{
    return - first.localeCompare(second);
}
arr.sort(age)
console.log(arr)
arr.sort(ageDesc)
console.log(arr)

终端选项卡输入如下命令编译并查看。会看到修改了排序方法之后,sort方法按照降序进行了排序。

tsc
node index.js

实验链接:https://developer.aliyun.com/adc/scenario/78d5177fbf02435e9d69dd44fab5d567

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
XML easyexcel Java
EasyExcel实现对excel文件读写
EasyExcel是阿里巴巴开源的一个excel处理框架,**以使用简单、节省内存著称**。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。
1825 1
EasyExcel实现对excel文件读写
|
10月前
|
JavaScript 前端开发 Linux
flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈
flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈
378 18
|
8月前
|
IDE 编译器 项目管理
Dev-C++保姆级安装教程:Win10/Win11环境配置+避坑指南(附下载验证)
Dev-C++ 是一款专为 Windows 系统设计的轻量级 C/C++ 集成开发环境(IDE),内置 MinGW 编译器与调试器,支持代码高亮、项目管理等功能。4.9.9 版本作为经典稳定版,适合初学者和教学使用。本文详细介绍其安装流程、配置方法、功能验证及常见问题解决,同时提供进阶技巧和扩展学习资源,帮助用户快速上手并高效开发。
|
机器学习/深度学习 人工智能 自然语言处理
AIGC在创意产业的应用与影响
【7月更文第27天】近年来,人工智能生成内容(AI-Generated Content, AIGC)的发展为创意产业带来了前所未有的机遇。从艺术创作到音乐制作,再到游戏设计和广告营销,AIGC正在以惊人的速度改变着这些领域的面貌。本文将探讨AIGC在创意产业中的应用,并通过具体的代码示例来展示如何利用Python等工具创建一些基本的生成模型。
370 6
|
机器学习/深度学习 人工智能 自然语言处理
AIGC:构筑创意新时代的神奇力量
**AIGC革命:人工智能正重塑创意领域,从设计到电影、音乐,其技术力量提升效率,激发灵感,开创多样化内容。AIGC应用于电影节、音乐创作,甚至影响认证标准如Adobe,带来机遇与挑战并存,引领我们迈向更加创新和美好的未来。**
|
人工智能 搜索推荐 算法
AIGC:为创意产业注入新质生产力
AIGC技术正在深刻重塑创意产业,以AI驱动的生产力创新被称为“新质生产力”,它依赖科技创新和智能化提升效率。AIGC通过高效生成文本、图像等内容,降低成本,增强营销和设计领域的效率与个性化。Adobe等公司支持这一技术,推动智能设计工具的发展。尽管面临原创性、版权等挑战,AIGC将与VR、AR融合,借助5G和大数据扩展应用,成为创意产业的关键驱动力。
|
安全 Linux Python
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility3内存取证工具安装及入门在Linux下的安装教程
1754 0
Volatility3内存取证工具安装及入门在Linux下的安装教程
|
JavaScript 开发工具 C++
Qt 配置GitHub Copilot
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
开发者
手把手教你微信公众号如何给指定用户发送消息提醒
消息提醒功能是提升用户满意度的最有效方式,基于微信聊天的消息提醒也是现在最常见的消息提醒方式之一,
手把手教你微信公众号如何给指定用户发送消息提醒
|
机器学习/深度学习 人工智能 计算机视觉
ICLR盲审阶段就被评审赞不绝口的论文:会是Transformer架构的一大创新吗?
ICLR盲审阶段就被评审赞不绝口的论文:会是Transformer架构的一大创新吗?
479 0