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

相关推荐
一只大侠的侠32 分钟前
【Harmonyos】Flutter开源鸿蒙跨平台训练营 Day 2 鸿蒙跨平台开发环境搭建与工程实践
flutter·开源·harmonyos
王码码20354 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
坚果派·白晓明4 小时前
在鸿蒙设备上快速验证由lycium工具快速交叉编译的C/C++三方库
c语言·c++·harmonyos·鸿蒙·编程语言·openharmony·三方库
lbb 小魔仙5 小时前
【HarmonyOS实战】OpenHarmony + RN:自定义 useFormik 表单处理
react native·harmonyos
果粒蹬i5 小时前
【HarmonyOS】DAY7:鸿蒙跨平台 Tab 开发问题与列表操作难点深度复盘
华为·harmonyos
王码码20355 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
ITUnicorn6 小时前
【HarmonyOS6】ArkTS 自定义组件封装实战:动画水杯组件
华为·harmonyos·arkts·鸿蒙·harmonyos6
全栈探索者6 小时前
@Component + struct = 你的新函数组件——React 开发者的鸿蒙入门指南(第 2 期)
react·harmonyos·arkts·前端开发·deveco studio·鸿蒙next·函数组件
廖松洋(Alina)7 小时前
【收尾以及复盘】flutter开发鸿蒙APP之成就徽章页面
flutter·华为·开源·harmonyos·鸿蒙
廖松洋(Alina)7 小时前
【收尾以及复盘】flutter开发鸿蒙APP之打卡日历页面
flutter·华为·开源·harmonyos·鸿蒙