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

相关推荐
TrisighT1 天前
DevEco Code 写鸿蒙 ArkTS 确实快,但我试了三天后把默认引擎换成了 Cursor
ai编程·harmonyos·cursor
liz7up1 天前
鸿蒙原生流程图 & 审批流组件 hmflowkit
harmonyos
网易云信2 天前
全框架覆盖!网易智企IM鸿蒙生态适配再进一步
人工智能·aigc·harmonyos
TrisighT2 天前
我用 AI 逆向了 ArkTS @Builder 的编译产物,看完再也不敢乱写嵌套了
ai编程·harmonyos·arkts
ONEDAY3 天前
HarmonyOS 深色模式适配实践:从资源、WebView 到网络图统一处理
harmonyos
鸿蒙开发4 天前
鸿蒙(HarmonyOS NEXT)表单校验别再手撸正则了 —— 我写了个 ArkTS 版 zod
harmonyos
TrisighT4 天前
ArkTS 的 @BuilderParam 你八成只用了皮毛——那个尾随闭包写法差点被我当 bug 删了
harmonyos·arkts·arkui
ONEDAY5 天前
HarmonyOS 多 Product 构建实践:一套代码生成多个产物
harmonyos
TT_Close5 天前
别劝退了!5秒搞定 Flutter 鸿蒙 FVM 起跑线
flutter·harmonyos·visual studio code
TrisighT5 天前
ArkTS 列表滚动时为什么会闪现旧数据?我扒了 LazyForEach 的复用逻辑
harmonyos·arkts·arkui