export const map = async ( arrayArg: T[], mapFunction: (itemArg: T) => Promise ): Promise => { const returnArray: R[] = []; for (const itemArg of arrayArg) { const mapResult = await mapFunction(itemArg); if (mapResult !== undefined) { returnArray.push(mapResult); } } return returnArray; }; export const filter = async ( arrayArg: T[], filterFunction: (itemArg: T) => Promise ): Promise => { const returnArray: T[] = []; for (const itemArg of arrayArg) { const filterResult = await filterFunction(itemArg); if (filterResult) { returnArray.push(itemArg); } } return returnArray; }; export const deduplicate = async ( arrayArg: T[], keyCreation: (itemArg: T) => Promise ): Promise => { const keysSet: Set = new Set(); const returnArray: T[] = []; for (const itemArg of arrayArg) { const key = await keyCreation(itemArg); if (!keysSet.has(key)) { keysSet.add(key); returnArray.push(itemArg); } } return returnArray; };