欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Typescript的数组 有大用 有大大用

数组类型

Typescript编程中,给数组定义类型分为两种:简便数组类型和泛型数组类型
简便数组类型:使用"[]"来定义是数组类型,例如:

const arr:number[] = [1,2,3]
       

[]前面的number表示是数组的元素是number,那么这个数组的元素就不能为string。

如果数组的元素有多个类型的话,那么就设置为复合类型:

const arr:(number|string)[] = ["21",43]
       

泛型数组类型:使用泛型来表示数组:
Array<number>        

const array1: Array<string | number> = [23, 43, "324"]
       

只读数组

定义只读数组:

  1. 使用"ReadonlyArray"内置类型,const red: ReadonlyArray<number> = [342, 3]

  2. 使用readonly修饰符,const color:readonly number[] = [32,546];。但是readonly修饰符不能和泛型数组类型一起使用

  3. 使用""Readonly工具类型,const green: Readonly<number[]> = [2, 3]


来自 https://blog.csdn.net/xuelian3015/article/details/124700277        


       

五、TypeScript 数组


现在我们来学习 TypeScript 数组,学完这一节,我们要知道,如何使用数组;如何创建数组;如何获取数组中的元素;如何遍历数组。


1. 数组概述

首先,什么是数组呢?我们为什么要使用数组呢?带着这两个疑问,我们来思考以下问题:

问题1:存储一个人的名字,怎么存?

你可能会觉得这个问题很简单,人的名字应该是字符串,那么声明一个字符串类型的变量来存储即可。

let name1: string = '迪丽热巴'
  • 1

问题2:存储三个人的名字,怎么存?

我们可以声明三个字符串类型的变量 。

let name1: string = '迪丽热巴' 
let name2: string = '古力娜扎' 
let name3: string = '马尔扎哈'


问题3:如果是存储一个班级中所有人的名字呢?

呃。。。存储多个数据时,声明多个变量就太繁琐了。

有没有更简单的方式呢,答案肯定是有的,就是我们今天要学习的数组。

什么是数组呢?数组是用于存放多个数据的集合。 也就是说,有了数组之后,只需要使用一个数组([]),就可以存储任意多个数据。

比如以上存储多个人名的问题,就可以使用数组:

let names: string[] = ['迪丽热巴', '古力娜扎', '马尔扎哈']

没有数组时存储三个人的名字,就需要三个字符串类型的变量。

let name1: string = '迪丽热巴' 
let name2: string = '古力娜扎' 
let name3: string = '马尔扎哈'

很明显,利用数组,可以更方便地存储多个人名。这样的话,即便你有再多的人名要存储,也只需要一个数组就可以了。

还有一点需要注意:**数组中,通常是相同类型的数据。**比如以上用来存储多个姓名的数组,每一项内容都是一个字符串,所以这是一个字符串数组。

2. 创建数组

在TS中,创建数组有两种语法形式。 我们先来看第一种。

  • 语法一(推荐):

let names: string[] = []

这种方式非常简单,我们是比较推荐的。[](中括号)表示数组。如果数组中没有内容,就是一个空数组。不管它有没有内容,都表示一个数组。以上代码创建好一个空数组,将这个空数组赋值给变量names。

数组的类型注解由两部分组成:类型+[]。此处表示字符串类型的数组(只能出现字符串类型)。

我们可以往数组存放字符串类型的项。

let names: string[] = ['迪丽热巴']

那我们可以往数组存放多个字符串类型的项吗?那肯定是可以的。

let names: string[] = ['迪丽热巴', '古力娜扎', '马尔扎哈']

数组中的每一项内容称为:元素。以上数组存放多个元素,注意多个元素之间使用逗号(,)分隔

咱们接着看第二种创建数组的语法。

  • 语法二(不推荐):

let names: string[] = new Array()

以上代码创建好一个空数组,将这个空数组赋值给变量names。功能与语法一 [] 相同,但是更加繁琐,所以我们不推荐:

let names: string[] = []

当数组中有数据时:

let names: string[] = new Array('迪丽热巴', '古力娜扎', '马尔扎哈')

相当于语法一:

let names: string[] = ['迪丽热巴', '古力娜扎', '马尔扎哈']

对比以上两种创建数组的语法,我们更加推荐语法一。数组中多个元素之间使用逗号(,)分隔。 我们指定了数组的注解为什么样的数据类型,数组中的每个元素就只能是什么数据类型。

3. 数组长度和索引

3.1 概述

我们先来通过一个例子来认识“数组长度和索引”。生活中,我们经常会排队,比如我们去吃饭,但是吃饭的人特别多,这时候我们就需要排队了。 在排队的时候,队伍是有长度的,队伍有多少人,长度就是多少。我们都知道,排队是不能插队的,我们讲究先来后到,队伍是有顺序的,每个人都有序号,你排在第几个,你的序号就是几。

我们知道了,队伍的特征:1 长度 2 顺序和序号(队伍中的每个人)。

我们可以把数组想象成这个队伍,因为数组也有长度,也有顺序并且数组中的每个元素也有序号。

3.2 数组长度

数组长度表示数组中元素的个数,通过数组的 length 属性来获取。 “length ”这个单词就表示“长度”的意思。

现在我们有一个数组:

let foods: string[] = ['煎饼', '馒头', '米饭']

我们想要获取数组长度,就可以通过数组的 length 属性来获取:

console.log(foods.length) // 3

接下来我们来看数组的索引,前面我们讲了:数组中的每个元素都有自己的序号。 它就跟我们排队一样,每个人都有自己的序号。

在TS中,我们把数组中元素的序号,称为:索引(下标),数组中的元素与索引一一对应。也就是说,数组中的每一个元素都有一个索引号。就好比我们在排队的时候,不管你排在第几个,你只会有一个序号,不可能同时有两个序号。但是我们要注意:数组索引是从 0 开始的。

let foods: string[] = ['煎饼', '馒头', '米饭']

以上数组的索引分别为:

‘煎饼’ => 0

‘馒头’ => 1

‘米饭’ => 2

接下来我们思考一个问题:这个数组的长度是多少呀?没错是3。这个数组的最大索引是几呀?是的,是2。

那么该数组的长度(length)和最大索引之间有什么关系?

很显然,最大索引为:length - 1

最后我们做一个总结:

  1. 数组是有序的集合,用来存储多个数据。

  2. 通过数组名.length获取数组长度

  3. 数组索引是从0开始的

4. 取值和存值

4.1 取值

什么是取值呢?从数组中,获取到某一个元素的值,就是从数组中取值。比如以下数组,我们想要获取到最爱的食物 — 煎饼

let foods: string[] = ['煎饼', '馒头', '米饭']

以上数组的索引分别为:

‘煎饼’ => 0

‘馒头’ => 1

‘米饭’ => 2

我们知道,数组中的元素与索引是一一对应的,那么我们就可以通过索引获取到某一个元素的值。

那么对应到TS,我们应该怎么实现呢?接下来我们就来看一下语法。

语法:

数组名称[索引]

我们想要获取到最爱的食物 — 煎饼。煎饼的索引值是0,所以:

console.log(foods[0]) // 煎饼

4.2 存值

那么什么是数组存值呢?如果要修改数组中某个元素的值,就要使用数组存值。(比如,不爱吃馒头,将馒头替换为包子)

还是同一个数组:

let foods: string[] = ['煎饼', '馒头', '米饭']

以上数组的索引分别为:

‘煎饼’ => 0

‘馒头’ => 1

‘米饭’ => 2

我们怎么实现将馒头替换为包子呢?我们要先获取到要修改的元素,然后,再存值。 接下来我们就来看一下语法。

语法:

数组名称[索引] = 新值

这里我们要获取的“馒头”元素索引为1,新值是 “包子”。所以:

foods[1] = '包子' 
console.log(foods) // ['煎饼', '包子', '米饭']

4.3 添加元素

接下来我们来学习如何往数组中添加元素。

实际上,我们前面学习的存值的语法:数组名称[索引] = 新值,这个语法不仅能实现修改元素 ,还可以实现添加元素

那什么时候是修改,什么时候是添加呢?是根据我们获取的数组元素的索引是否存在决定的。当索引存在时,就实现修改功能;当索引不存在时,就实现添加功能。

还是前面我们使用的数组:

let foods: string[] = ['煎饼', '馒头', '米饭']

以上数组的索引分别为:

‘煎饼’ => 0

‘馒头’ => 1

‘米饭’ => 2

当我们执行foods[1] = '包子'这时候索引存在,就表示:修改元素。

当我们执行foods[3] = '油泼面'这时候索引不存在,就表示:添加元素。

console.log(foods) // ['煎饼', '馒头', '米饭', '油泼面']
  • 添加元素的通用写法:数组名称[数组长度] = 新值

5. 遍历数组

遍历数组,也就是把数组中的所有元素挨个获取一次。那我们拿到每个元素有什么用呢?下面我们就通过一个例子来说明。

let nums: number[] = [100, 200, 300]

现在我们想计算出这个数组所有数字的和。也就是分别拿到100、200、300,然后把它们加在一起。在这样的场景下,我们就需要获取到数组中的每一个元素。

我们可以通过数组取值的方式,一个个取出来:

console.log(nums[0]) // 100 
console.log(nums[1]) // 200 
console.log(nums[2]) // 300

如果数组中有100个、1000个、10000个元素呢?那太繁琐,相似的代码重复多次。前面我们讲过,重复做某件事情,可以使用 for 循环遍历数组。重复取值的规律:索引号自增(每次加1 ),而 for 循环的计数器i也是自增的:

let sum: number = 0;
for (let i: number = 0; i < nums.length; i++) { 
	sum += nums[i]);
}
console.log(sum);

注意1:因为数组索引是从0开始的,所以计数器i的默认值为0

注意2:应该根据数组长度来计算,公式为数组长度减一,也就是:nums.length – 1(最大索引)。

优势:不管数组中元素的数量怎么变化,for循环的判断条件不需要改动。

最后,我们做个总结:

  1. 遍历数组,也就是把数组中的所有元素挨个获取一次。

  2. 使用for循环语句遍历数组

  3. for循环计数器的默认值是0

  4. for循环的判断条件是i < nums.length

来自   https://blog.csdn.net/weixin_46261309/article/details/107670832


普通分类: