rpgeeganage/async-ray

View on GitHub
lib/methods/a_filter.ts

Summary

Maintainability
A
0 mins
Test Coverage
/** returns boolean */
export type CallBackFilter<T> = (
  value: T,
  index?: number,
  collection?: T[]
) => Promise<boolean>;

/**
 * Async Filter function
 *
 * @export
 * @template T
 * @param {T[]} elements
 * @param {CallBackFilter<T>} cb
 * @returns {Promise<T[]>}
 */
export async function aFilter<T>(
  elements: T[],
  cb: CallBackFilter<T>
): Promise<T[]> {
  const filteredResults: T[] = [];
  for (const [index, element] of elements.entries()) {
    if (await cb(element, index, elements)) {
      filteredResults.push(element);
    }
  }

  return filteredResults;
}