mirror of
https://github.com/hanzoai/calendar.git
synced 2026-09-24 22:42:24 +00:00
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import logger from "@calcom/lib/logger";
|
|
import { safeStringify } from "@calcom/lib/safeStringify";
|
|
|
|
export type GetDominantAccountIdInput = {
|
|
AccountId: string;
|
|
}[];
|
|
|
|
export default function getDominantAccountId(contacts: GetDominantAccountIdInput) {
|
|
const log = logger.getSubLogger({ prefix: [`[getDominantAccountId]:${contacts}`] });
|
|
// To get the dominant AccountId we only need to iterate through half the array
|
|
const iterateLength = Math.ceil(contacts.length / 2);
|
|
// Store AccountId frequencies
|
|
const accountIdCounts: { [accountId: string]: number } = {};
|
|
|
|
for (const contact of contacts) {
|
|
const accountId = contact.AccountId;
|
|
accountIdCounts[accountId] = (accountIdCounts[accountId] || 0) + 1;
|
|
// If the number of AccountIds makes up 50% of the array length then return early
|
|
if (accountIdCounts[accountId] > iterateLength) return accountId;
|
|
}
|
|
|
|
// Else figure out which AccountId occurs the most
|
|
let dominantAccountId;
|
|
let highestCount = 0;
|
|
|
|
for (const accountId in accountIdCounts) {
|
|
if (accountIdCounts[accountId] > highestCount) {
|
|
highestCount = accountIdCounts[accountId];
|
|
dominantAccountId = accountId;
|
|
}
|
|
}
|
|
|
|
log.info("Dominant AccountId", safeStringify({ dominantAccountId }));
|
|
return dominantAccountId;
|
|
}
|