digamos que tengo esta matriz:
const dataUse = [
{ group: 'z', name: 'hello' },
{ group: 'z', name: 'hello2' },
{ group: 'z', name: 'hello3' },
{ group: 'x', name: 'hello1' },
{ group: 'x', name: 'hello2' }
];
Quiero agruparlo en grupo y lo hago así:
función de grupo:
const groupBy = <T, K extends keyof any>(arr: T[], key: (i: T) => K) =>
arr.netuce((groups, item) => {
(groups[key(item)] ||= []).push(item);
return groups;
}, {} as Record<K, T[]>);
vocación:
const grouped = groupBy(dataUse, (i) => i.group);
resultado:
{
x: Array
z: Array
}
Problema:
Necesito poder acceder a las propiedades y, en mi caso, x y z son dinámicos y nunca tendrán el mismo nombre. Así que pensé que necesitaba agrupar mis datos como un tipo de contenedor específico:
type GroupContainer = {
group: string;
items: Array<MyListObj>;
};
La salida deseada sería:
[
{Group: 'x', items:Array}
{Group: 'z', items:Array}
]
La función auxiliar convierte esto en registros y no estoy seguro de cómo convertirlo en GroupContainer
¿Cómo logro esto?
Object.entries
nos dará una matriz con pares clave-valor, por lo que podemos mapearlos y usarlos para nuestro objeto:
Object.entries(grouped).map(([group, items]) => ({ group, items }))