Files

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;
}