ArkTS中数组的常用操作

在 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 状态管理实现动态更新。

相关推荐
特立独行的猫a4 小时前
HarmonyOS 影视应用APP开发--配套的后台服务go-imovie项目介绍及使用
华为·golang·harmonyos·影视app
梁下轻语的秋缘6 小时前
HarmonyOS:重构万物互联时代的操作系统范式
华为·重构·harmonyos
lpfasd1236 小时前
Flutter与Kotlin Multiplatform(KMP)深度对比及鸿蒙生态适配解析
flutter·kotlin·harmonyos
交叉编译之王 hahaha6 小时前
OpenHarmony 5.1.0 Release目录结构详细解析(3级目录)
arm开发·华为·harmonyos
交叉编译之王 hahaha7 小时前
RK3568-鸿蒙5.1与原生固件-扇区对比分析
华为·harmonyos
HarmonyOS_SDK7 小时前
【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)
harmonyos
梁下轻语的秋缘9 小时前
鸿蒙系统电脑:开启智能办公新时代
华为·电脑·harmonyos
梁下轻语的秋缘9 小时前
HarmonyOS 与 OpenHarmony:同根而不同途
华为·harmonyos
__Benco18 小时前
OpenHarmony平台驱动开发(十七),UART
人工智能·驱动开发·harmonyos
落叶挽歌1 天前
鸿蒙ArkUI体验:Hexo博客客户端开发心得
华为·harmonyos