鸿蒙三方库 | 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 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
逆回12 小时前
给鸿蒙手机做一只 3D 宠物:五个把我卡住的问题
harmonyos
钉先生贾14 小时前
性能、体积与稳定性:怎样写出可信的适配结论
华为·harmonyos
笑 总不会犯错19 小时前
摆脱多端数据撕裂,鸿蒙分布式数据库同步与冲突合并
harmonyos
用户1179104883319 小时前
鸿蒙签名失败不是玄学:5 个证据点把 hapsigntool 一次排通 GitHub:swsgbl/hmharness
开源·ai编程·harmonyos
redtank20001 天前
纯血鸿蒙小工具三件套实测:弹幕手持、爱记录与仓库管理软件
学习·华为·智能手机·harmonyos
xyzzklk1 天前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
用户86194177207412 天前
uni-app 的蓝牙 API 在鸿蒙上不生效?我写了个兼容层,让老代码零改动跑起来
harmonyos
HarmonyOS_SDK2 天前
【HarmonyOS SDK Skills】挂载 Agent Skill,轻松跑通鸿蒙应用广告变现
harmonyos
闫东阳LordGalaxy2 天前
给小艺装上数学能力:数易 App 接入智能体 FunctionComponent 与 A2A 双通路实战
harmonyos
Dream-Y.ocean2 天前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos