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

相关推荐
二流小码农19 分钟前
鸿蒙开发:wrapBuilder传递参数
android·ios·harmonyos
别说我什么都不会41 分钟前
鸿蒙(HarmonyOS)性能优化实战-应用性能分析工具CPU Profiler使用指南
性能优化·harmonyos
png1 小时前
从零开始纯血鸿蒙天气预报-主界面(1)
harmonyos·arkui
城中的雾1 小时前
鸿蒙开发者必看:如何用一行命令搞定HSP/HAP文件安装?
harmonyos
Georgewu3 小时前
【HarmonyOS Next】鸿蒙应用弹框和提示气泡详解(一)
前端·华为·harmonyos
今阳3 小时前
鸿蒙开发笔记-11-LazyForEach 数据懒加载
android·华为·harmonyos
坚果的博客4 小时前
鸿蒙版Flutter快递查询助手
flutter·华为·harmonyos
轻口味4 小时前
【每日学点HarmonyOS Next知识】状态栏控制、片段按钮点击回调、绘制组件、取消按钮与输入框对齐、父调子组件方法
pytorch·华为·harmonyos·harmonyosnext
花先锋队长4 小时前
鸿蒙生态日日新,夸克、顺丰速运、驾校一点通等多款应用功能更新
华为·harmonyos
zzialx4 小时前
HarmonyOS:基于hmrouter实现Page的生命周期监听
华为·harmonyos