
export function unique<TKey, TValue>(arr: TValue[], getKey: (item: TValue) => TKey): TValue[] {
  const keys = new Set<TKey>();

  return arr.filter((v: TValue) => {
    const key = getKey(v);
    if (keys.has(key))
      return false;

    keys.add(key);
    return true;
  });
}
