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

前言

数组过滤、排序和分块是数据处理的核心操作。@pura/harmony-utilsArrayUtil 封装了这些高级数组操作方法,让数据处理更加简洁。本文将从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 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
不言鹅喻1 小时前
HarmonyOS ArkTS 实战:实现一个掷骰子模拟器
华为·harmonyos
LEO111102 小时前
HarmonyOS应用《玄象》开发实战:RenderingContextSettings(true) 抗锯齿对 Canvas 渲染的影响
harmonyos·鸿蒙
爱写代码的阿森2 小时前
鸿蒙三方库 | harmony-utils之ArrayUtil集合操作与去重详解
华为·harmonyos·鸿蒙·huawei
qizayaoshuap3 小时前
# 评分器组件开发实战:HarmonyOS ArkTS 五星评分交互应用解析
华为·交互·harmonyos
b130538100494 小时前
HarmonyOS应用《玄象》开发实战:AiPhotoFengshuiPage AI 拍照风水:@ohos.multimedia.camera 相机调用
harmonyos·鸿蒙
爱写代码的阿森4 小时前
鸿蒙三方库 | harmony-utils之NumberUtil数值精确计算详解
华为·harmonyos·鸿蒙·huawei
b130538100496 小时前
HarmonyOS应用《玄象》开发实战:HomePage 顶部标题栏的 Row + Blank 三段式布局
harmonyos·鸿蒙
●VON9 小时前
鸿蒙 PC Markdown 编辑器内核:在 ArkWeb 中离线运行 CodeMirror 6
安全·华为·编辑器·harmonyos·鸿蒙
YM52e11 小时前
鸿蒙Flutter Padding内边距:EdgeInsets详解
android·学习·flutter·华为·harmonyos·鸿蒙