filterAsync
使用异步条件函数过滤数组,返回仅包含满足条件的元素的新数组。
typescript
const filtered = await filterAsync(array, predicate);参考
filterAsync(array, predicate, options?)
当需要使用 API 调用或数据库查询等异步操作过滤数组时,使用 filterAsync。与常规的 filter 不同,它支持异步条件函数,并可以通过 concurrency 选项限制并发执行数。
typescript
import { filterAsync } from 'es-toolkit/array';
// 通过 API 检查用户状态,过滤出活跃用户。
const users = [{ id: 1 }, { id: 2 }, { id: 3 }];
const activeUsers = await filterAsync(users, async user => {
return await checkUserStatus(user.id);
});
// 返回:仅包含活跃用户的数组
// 限制并发数以减少服务器负载。
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = await filterAsync(numbers, async n => await isEvenAsync(n), { concurrency: 2 });
// 最多同时执行 2 个操作。concurrency 选项有助于限制外部 API 调用或有效管理系统资源。如果未指定,所有操作将并发执行。
typescript
import { filterAsync } from 'es-toolkit/array';
// 最多同时执行 3 个 API 调用。
const items = await filterAsync(largeArray, async item => await validateItem(item), { concurrency: 3 });参数
array(readonly T[]):要过滤的数组。predicate((item: T, index: number, array: readonly T[]) => Promise<boolean>):测试每个元素的异步函数。如果返回真值,该元素将包含在结果中。options(FilterAsyncOptions, 可选):控制并发的选项。concurrency(number, 可选):最大并发操作数。如果未指定,所有操作将并发执行。
返回值
(Promise<T[]>):一个 Promise,解析为仅包含条件函数返回真值的元素的新数组。

