鸿蒙三方库 | 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 安装依赖
ohpm install @pura/harmony-utils
2.2 数组过滤
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 数组分块
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;
}
})

三、完整页面示例
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 分页列表
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 数据分组展示
interface Student { name: string; grade: string; score: number; }
function groupByGrade(students: Student[]): Map<string, Student[]> {
return ArrayUtil.groupBy(students, 'grade');
}
五、注意事项
- 不可变性:方法返回新数组,不修改原数组
- 空数组安全:对空数组操作返回空结果
- chunk边界:最后一块可能小于指定大小
- 初始化依赖:使用前需确保
AppUtil.init()已调用 - 性能考虑:大数组排序时注意性能
六、常见问题
Q1: sortBy支持降序吗?
sortBy默认升序,降序可先排序再reverse。
Q2: flatten支持多层嵌套吗?
取决于实现,通常只展开一层,多层需递归调用。
Q3: groupBy的key可以是嵌套属性吗?
通常只支持一级属性,嵌套属性需自定义分组函数。
Q4: chunk对空数组返回什么?
返回空数组[],不会报错。


总结
ArrayUtil 的过滤排序和分块方法为数据处理提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法简化数据筛选、分页、分组等操作。
本文基于
@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。
更多推荐


所有评论(0)