Array of non-null/undefined results after mapping
const nums = ["1", "a", "2", "b", "3"];
const parseNum = (s: string) => isNaN(Number(s)) ? undefined : Number(s);
mapDefined(nums, parseNum) // Returns [1, 2, 3]
const users = [{name: "Alice"}, null, {name: "Bob"}];
const getName = (user: any) => user?.name;
mapDefined(users, getName) // Returns ["Alice", "Bob"]
export function mapDefined<T, R>(items: T[], fn: (arg: T) => R | null | undefined | void): R[] {
return items.map(fn).filter((result): result is R => {
if (result === undefined || result === null) {
return false;
}
if (Array.isArray(result)) {
return result.length > 0;
}
return true;
});
}
Maps an array of items using a function and filters out any null or undefined results.