HarmonyOS NEXT鸿蒙开发 ArkTS:数组 作者:马育民 • 2025-09-28 16:53 • 阅读:10007 # 案例 ### 案例1 一个人最多拿10瓶啤酒,那么如何拿20瓶啤酒? [](https://www.malaoshi.top/upload/pic/java/QQ20210413220955.jpg) ### 案例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 = ["李雷","韩梅梅","lucy","lili"] console.log( students ) ``` # 数组元素的访问 通过索引(从 0 开始)访问 ```typescript 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` 属性获取或修改数组长度: ```typescript 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 循环 ```typescript 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 支持多维数组(数组的元素也是数组): ```typescript // 二维数组(矩阵) 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` 关键字声明只读数组(不能修改元素或长度): ```typescript const readonlyArr: readonly number[] = [1, 2, 3]; // 以下操作会报错: // readonlyArr[0] = 10; // readonlyArr.push(4); // readonlyArr.length = 5; ``` 原文出处:http://www.malaoshi.top/show_1GW1wcyg7ZJf.html