案例
案例1
一个人最多拿10瓶啤酒,那么如何拿20瓶啤酒?
案例2
一个班级的学生有30人,如何用变量表示这30人的数学成绩?用30个变量吗?
应该使用数组,数组的作用相当于上面的啤酒箱,可以装入30人的数学成绩
int lilei=80;
int hanmeimei=87;
.........
int lucy=85;
数组
存储 相同类型 的数据,按一定的 顺序 排列
声明
方式一(推荐)
使用方括号声明
let 变量名 : 类型[] = []
例子
let students : string[] = ["李雷","韩梅梅","lucy","lili"]
console.log( students )
方式二
使用泛型语法
let 变量名 : Array<类型> = []
例子
let students : Array<string> = ["李雷","韩梅梅","lucy","lili"]
console.log( students )
数组元素的访问
通过索引(从 0 开始)访问
let languages: string[] = ["ArkTS", "Java", "JS"];
// 访问元素
console.log(languages[0]); // 输出:ArkTS
访问越界索引(返回 undefined)
console.log(languages[10]); // 输出:undefined
修改数组元素
// 修改元素
languages[1] = "Python";
console.log(languages[1]); // 输出:Python
数组的长度(length)
通过 length 属性获取或修改数组长度:
let nums: number[] = [10, 20, 30];
console.log(nums.length); // 输出:3
// 缩短数组(截断后面的元素)
nums.length = 2;
console.log(nums); // 输出:[10, 20]
// 延长数组(新增元素为 undefined)
nums.length = 5;
console.log(nums); // 输出:[10, 20, undefined, undefined, undefined]
常用数组方法
ArkTS 数组支持多种内置方法,用于操作元素:
| 方法 | 说明 | 示例 |
|---|---|---|
push(element) |
向数组末尾添加元素,返回新长度 | nums.push(40); // nums 变为 [10,20,40] |
pop() |
移除并返回最后一个元素 | let last = nums.pop(); |
unshift(element) |
向数组开头添加元素,返回新长度 | nums.unshift(5); // nums 变为 [5,10,20] |
shift() |
移除并返回第一个元素 | let first = nums.shift(); |
splice(start, count) |
从 start 位置删除 count 个元素 | nums.splice(1, 1); // 移除索引1的元素 |
slice(start, end) |
截取 [start, end) 区间的元素(新数组) | let sub = nums.slice(0, 2); |
concat(arr) |
合并数组,返回新数组 | let combined = nums.concat([30,40]); |
indexOf(value) |
返回元素首次出现的索引(-1表示不存在) | let idx = nums.indexOf(20); |
includes(value) |
判断数组是否包含元素(返回布尔值) | let has20 = nums.includes(20); |
join(separator) |
用分隔符拼接元素为字符串 | let str = nums.join("-"); |
reverse() |
反转数组(修改原数组) | nums.reverse(); |
sort() |
排序数组(默认按字符串排序) | nums.sort((a,b) => a - b); // 数字升序 |
数组遍历
访问数组的每一个元素
for 循环
let fruits: string[] = ["苹果", "香蕉", "橙子"];
// 1. for 循环
for (let i = 0; i < fruits.length; i++) {
console.log(`索引 ${i}: ${fruits[i]}`);
}
for…of 循环(遍历元素)
// 2. for...of 循环(遍历元素)
for (let fruit of fruits) {
console.log(fruit);
}
forEach 方法(回调函数)
// 3. forEach 方法(回调函数)
fruits.forEach((item, index) => {
console.log(`第 ${index+1} 个水果:${item}`);
});
二维数组
ArkTS 支持多维数组(数组的元素也是数组):
// 二维数组(矩阵)
let matrix: number[][] = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
// 访问元素
console.log(matrix[1][2]); // 输出:6
// 遍历二维数组
for (let row of matrix) {
for (let num of row) {
console.log(num);
}
}
只读数组
使用 readonly 关键字声明只读数组(不能修改元素或长度):
const readonlyArr: readonly number[] = [1, 2, 3];
// 以下操作会报错:
// readonlyArr[0] = 10;
// readonlyArr.push(4);
// readonlyArr.length = 5;
