Skip to content

Instantly share code, notes, and snippets.

@buskerone
Last active March 16, 2022 23:00
Show Gist options
  • Save buskerone/d51a1008f4782391f7dedd7b3be9055e to your computer and use it in GitHub Desktop.
Save buskerone/d51a1008f4782391f7dedd7b3be9055e to your computer and use it in GitHub Desktop.
get two most important clients
// Dentro del dashboard hay una seccion donde se listan los 2 clientes mas importantes, osea que tienen mayor cantidad de proyectos asignados.
// El array que vas a recibir es el siguiente =>['Client1', 'Client2','Client2','Client3','Client2','Client3'];
// , siendo la posicion el Proyecto y el valor, el cliente asignado. La function deberia retornar un array con los 2 clientes con mayor cantidad de proyectos asignados.
const clients = ['Client1','Client2','Client2','Client3','Client2','Client3'];
// Respuesta original
const getMostImportantClients = () => {
const obj = {}
const repeated = []
clients.forEach(c => {
// si existe sumo 1
if (obj[c]) obj[c] += 1
else obj[c] = 1
})
// otra forma más corta
// clients.forEach(c => obj[c] = (obj[c] || 0) + 1)
// {"Client1": 1, "Client2": 3, "Client3": 2}
Object.entries(obj).forEach(c => {
// se asigna el valor actual al repeated[0] en dos casos: la primera es que repeated[0] no esté definido,
// y la segunda, es cuando el elemento actual es mayor que el ya definido.
if (!repeated[0] || c[1] > obj[repeated[0]]) repeated[0] = c[0]
// Si no se cumple la condición anterior, quiere decir que el elemento actual es menor que el almacenado en repeated,
// en este caso, lo asignamos a repeated[1] que es el segundo mayor (solo si se cumplen algunas de las dos condiciones siguientes:
// repeated[1] no esté definido o que el elemento actual sea mayor que el repeated actual)
else if (!repeated[1] || c[1] > obj[repeated[1]]) repeated[1] = c[0]
})
return repeated
}
// Respuesta mejorada
const getMostImportantClients = () => {
const obj = {}
clients.forEach(c => obj[c] = (obj[c] || 0) + 1)
return Object.entries(obj).sort((a, b) => b[1] - a[1]).map(c => c[0]).slice(0, 2)
}
console.log(getMostImportantClients())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment