前言

数组过滤、排序和分块是数据处理的核心操作。@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 安装依赖

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');
}

五、注意事项

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

六、常见问题

Q1: sortBy支持降序吗?

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

Q2: flatten支持多层嵌套吗?

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

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

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

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

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

在这里插入图片描述
在这里插入图片描述

总结

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

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

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐