rpgeeganage/async-ray

View on GitHub
lib/methods/a_find_index.ts

Summary

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

/**
 * Async FindIndex function
 *
 * @export
 * @template T
 * @param {T[]} elements
 * @param {CallBackFind<T>} cb
 * @returns {Promise<number>}
 */
export async function aFindIndex<T>(
  elements: T[],
  cb: CallBackFindIndex<T>
): Promise<number> {
  for (const [index, element] of elements.entries()) {
    if (await cb(element, index, elements)) {
      return index;
    }
  }

  return -1;
}