Solución

@estouchedisindo·19/5/2026TypeScript
solution.tsTypeScript
export function groupBy<T extends Record<string, unknown>>(
  items: T[],
  key: keyof T
): Record<string, T[]> {
  // Agrupa los elementos por el valor de la propiedad indicada
  return items.reduce( (groupedObj, subObj) => {

    // Crea la propiedad (llave) de agrupamiento de los obj item
    const groupingKey = subObj[key] as string;

    // Comprueba si existe la dicha llave en objeto de agrupamiento final
    if( groupedObj.hasOwnProperty( groupingKey )) {

      // Si existe simplemente se añade el subObj al array de values
      // la llave de agrupamiento es creada desde el subObj => 
      // no necesita mayor comprobación
      groupedObj[groupingKey].push( subObj);

    } else {
      // Si aún no ha sido creada dicha prop
      // la creamos con un array vacío
      groupedObj[groupingKey] = []
      // agregamos el subObj. A NOTAR que el método push() 
      // devuelve la nueva longitud y lo que tenemos es un subObj[]: T[]
      // de ahí los pasos
      groupedObj[groupingKey].push(subObj)
    }

    return groupedObj;

  }, {});
}
0respuestas
Respuestas

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.