在 ArkTS(鸿蒙扩展 TypeScript)中,数组是高频使用的数据结构,其操作结合了 TypeScript 的语法特性与鸿蒙的静态类型优化。以下是ArkTS中数组的常用操作:
一、数组基础
1. 声明与初始化
ArkTS 要求明确数组类型,支持两种声明方式:
typescript
// 方式1:元素类型后接 []
let numArr: number[] = [1, 2, 3]; // 严格限定元素为数字类型
// 方式2:泛型语法 Array<Type>
let strArr: Array<string> = ["A", "B"]; // 显式声明字符串数组
2. 类型安全限制
ArkTS 强制类型校验,禁止混合类型:
less
let mixedArr: number[] = [1, "2"]; // ❌ 编译报错(字符串无法赋值给数字数组)
二、常用操作
1. 元素增删
末尾操作:
ini
let arr = [10, 20];
arr.push(30); // 末尾添加 → [10,20,30]
let last = arr.pop(); // 删除末尾 → 返回30,数组变为[10,20]
首部操作:
lua
arr.unshift(5); // 开头插入 → [5,10,20] [[5]]
let first = arr.shift(); // 删除首元素 → 返回5,数组变为[10,20]
指定位置操作(splice):
scss
// 插入元素
arr.splice(1, 0, 15); // 索引1插入15 → [10,15,20]
// 删除元素
arr.splice(0, 2); // 删除前两个元素 → [20]
2. 元素遍历
for...of 循环:
javascript
for (let item of arr) {
console.log(item); // 依次输出元素
}
map 转换:
ini
let doubled = arr.map(x => x * 2); // 生成新数组 [20,30,40]
3. 数组合并
展开运算符(推荐):
ini
let merged = [...arr, ...[30, 40]]; // [10,20,30,40]
concat 方法:
css
let combined = arr.concat([30], [40]); // 链式合并 → [10,20,30,40]
4. 数组过滤与查找
filter 过滤:
ini
let filtered = arr.filter(x => x > 15); // 筛选大于15的元素 → [20]
find 查找:
ini
let found = arr.find(x => x === 20); // 返回20,未找到则返回undefined
三、高级功能
1. 多维数组
支持嵌套结构,用于矩阵或表格场景:
ini
let matrix: number[][] = [[1,2], [3,4]]; // 二维数组
matrix[1].push(5); // 第二行变为 [3,4,5]
2. 类型联合数组
通过联合类型支持混合元素(需谨慎使用):
typescript
let unionArr: Array<number | string> = [1, "two"]; // 允许数字或字符串
四、性能优化建议
预分配空间
初始化时指定容量减少扩容开销:
javascript
let largeArr = new Array(1000).fill(0); // 预分配1000元素空间
避免频繁头部操作
unshift/shift 需重排索引,建议改用链表结构处理高频首尾操作。
批量修改优先 splice
替代多次 push/pop 减少内存操作次数:
scss
arr.splice(0, 0, ...newElements); // 一次性头部插入多个元素
五、完整示例
perl
// 声明并操作数组
let devices: string[] = ["Phone", "Tablet"];
devices.push("Watch"); // 末尾添加 → ["Phone","Tablet","Watch"]
devices.splice(0, 1); // 删除首元素 → ["Tablet","Watch"]
devices.unshift("TV"); // 开头插入 → ["TV","Tablet","Watch"]
// 合并与过滤
let newDevices = ["Router", ...devices]; // 合并为 ["Router","TV","Tablet","Watch"]
let filtered = newDevices.filter(d => d !== "TV"); // 过滤后 ["Router","Tablet","Watch"]
// 输出结果
console.log(filtered); // ["Router","Tablet","Watch"]
通过合理运用上述方法,可高效处理 ArkTS 数组的各类场景。若需跨设备同步数组状态,可结合鸿蒙的 @StorageLink 状态管理实现动态更新。