鸿蒙三方库 | harmony-utils之ArrayUtil集合过滤排序与分块详解

前言

数组过滤、排序和分块是数据处理的核心操作。@pura/harmony-utils 的 ArrayUtil 封装了这些高级数组操作方法,让数据处理更加简洁。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、ArrayUtil过滤排序核心API

ArrayUtil 提供了以下高级数组操作方法:

方法 说明 返回类型 使用场景
filter(array, predicate) 过滤 T\[\] 条件筛选
sortBy(array, key) 按属性排序 T\[\] 列表排序
chunk(array, size) 分块 T\[\]\[\] 分页/分组
flatten(array) 扁平化 T\[\] 嵌套展开
groupBy(array, key) 分组 Map 数据分组
count(array, predicate) 计数 number 统计计数

1.1 核心特性

  • 简洁易用:封装复杂逻辑为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 函数式风格:支持谓词函数,灵活定义过滤条件

1.2 操作方法对照

方法 输入 输出 说明
filter 1,2,3,4 + 偶数 2,4 条件筛选
chunk 1,2,3,4 + 2 \[1,2,3,4] 固定大小分块
flatten \[1,2,3,4] 1,2,3,4 嵌套展开
groupBy 按属性分组 Map 分类汇总

二、完整使用步骤

2.1 安装依赖

bash 复制代码
ohpm install @pura/harmony-utils

2.2 数组过滤

typescript 复制代码
import { ArrayUtil } from '@pura/harmony-utils';

Button('数组过滤')
  .width('100%')
  .onClick(() => {
    try {
      let arr = [1, 2, 3, 4, 5, 6];
      let even = arr.filter(n => n % 2 === 0);
      this.result = `原数组: [${arr}]\n偶数: [${even}]`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 数组分块

typescript 复制代码
Button('数组分块')
  .width('100%')
  .onClick(() => {
    try {
      let arr = [1, 2, 3, 4, 5, 6];
      let chunks = ArrayUtil.chunk(arr, 2);
      this.result = `原数组: [${arr}]\n分块(2): ${JSON.stringify(chunks)}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

三、完整页面示例

typescript 复制代码
import { ArrayUtil } from '@pura/harmony-utils';

@Entry
@Component
struct ArrayFilterDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('过滤偶数').width('100%').onClick(() => {
        let arr = [1, 2, 3, 4, 5, 6];
        this.result = `偶数: [${arr.filter(n => n % 2 === 0)}]`;
      });
      Button('分块').width('100%').onClick(() => {
        this.result = `分块: ${JSON.stringify(ArrayUtil.chunk([1, 2, 3, 4], 2))}`;
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 分页列表

typescript 复制代码
import { ArrayUtil } from '@pura/harmony-utils';

function paginateList(items: string[], page: number, pageSize: number): string[] {
  let chunks = ArrayUtil.chunk(items, pageSize);
  return chunks[page - 1] || [];
}

4.2 数据分组展示

typescript 复制代码
interface Student { name: string; grade: string; score: number; }

function groupByGrade(students: Student[]): Map<string, Student[]> {
  return ArrayUtil.groupBy(students, 'grade');
}

五、注意事项

  1. 不可变性:方法返回新数组,不修改原数组
  2. 空数组安全:对空数组操作返回空结果
  3. chunk边界:最后一块可能小于指定大小
  4. 初始化依赖 :使用前需确保 AppUtil.init() 已调用
  5. 性能考虑:大数组排序时注意性能

六、常见问题

Q1: sortBy支持降序吗?

sortBy默认升序,降序可先排序再reverse。

Q2: flatten支持多层嵌套吗?

取决于实现,通常只展开一层,多层需递归调用。

Q3: groupBy的key可以是嵌套属性吗?

通常只支持一级属性,嵌套属性需自定义分组函数。

Q4: chunk对空数组返回什么?

返回空数组\[\],不会报错。

总结

ArrayUtil 的过滤排序和分块方法为数据处理提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法简化数据筛选、分页、分组等操作。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
youyin5 天前
HarmonyOS ArkUI 组件与自定义组件零基础:从搭页面到组件化开发
华为·harmonyos
HwJack205 天前
【HarmonyOS开发小实践】ArkTS 从 TypeScript 到方舟语言的演进
华为·harmonyos
张星河zen5 天前
4096卡、8EFLOPS、7.2T NPO:华为昇腾960超节点详解
华为·ai训练·ai推理·超节点·npo·昇腾960·hi-one
梦想不只是梦与想5 天前
鸿蒙 应用发布:软件上传流程(二)
鸿蒙·应用发布·软件上传
云运维笔记6 天前
华为设备IP地址配置全攻略
运维·网络·计算机网络·华为
威哥爱编程6 天前
HarmonyOS 7 星盾机密风控实战:设备风险因子端侧融合计算,可用不可见
harmonyos·arkts
威哥爱编程6 天前
HarmonyOS 7 应用快启实战:关键资源预加载进内存,冷启告别白屏
华为·harmonyos·arkts
马剑威(威哥爱编程)6 天前
【共创稿事节】HarmonyOS 7 视觉 AI 进阶实战:人脸检测 + 通用文字识别(OCR)两步接入
华为·harmonyos·arkts
HMS Core6 天前
HarmonyOS智慧多窗,让应用在任意窗口都“恰到好处”
harmonyos