Remove duplicates from an array by a key or function. First occurrence wins.
export function uniqueBy<T, K>(arr: T[], keyFn: keyof T | ((item: T) => K)): T[] {
const seen = new Set<K>();
return arr.filter((item) => {
const key = typeof keyFn === 'function' ? (keyFn as (item: T) => K)(item) : (item[keyFn as keyof T] as K);
if (seen.has(key)) return false;
seen.add(key);
return true;
});
}
// uniqueBy(items, 'id') or uniqueBy(items, x => x.id)
Dedupe by key or key function. First occurrence is kept.
Unique by id, slug, or a computed key.
uniqueBy(comments, (c) => c.userId);