Ejemplo hecho de código -
Interfaz -
interface IInterface { id: number; name: string; age: number; }matriz -
const arr: IInterface[] = [ { id: 1, name: 'daniel', age: 12 }, { id: 2, name: 'jonny', age: 13 }, { id: 3, name: 'daniel', age: 12 }, { id: 4, name: 'daniel', age: 12 } ]Función agrupar por -
const GroupBy = ( array: IInterface[], f: (element: IInterface) => (string | number | undefined)[] ) => { const groups: { [key: string]: IInterface[] } = {}; array.forEach((object) => { const group = f(object).join("-"); groups[group] = groups[group] || []; groups[group].push(object); }); return groups; };Usando la función groupBy -
const Grouped = GroupBy(arr, (element: IInterface) => { return [ element.name, element.age, ]; });Resultado ahora -
{ "daniel-12": [ { "id": 1, "name": "daniel", "age": 12 }, { "id": 3, "name": "daniel", "age": 12 }, { "id": 4, "name": "daniel", "age": 12 } ], "jonny-13": [ { "id": 2, "name": "jonny", "age": 13 } ] }resultado buscado -
{ "daniel-12-ids-1-3-4": [ { "id": 1, "name": "daniel", "age": 12 }, { "id": 3, "name": "daniel", "age": 12 }, { "id": 4, "name": "daniel", "age": 12 } ], "jonny-13-ids-2": [ { "id": 2, "name": "jonny", "age": 13 } ] }Necesito que todas las identificaciones de grupo estén en el nombre de la clave ...................................... .................................................... .................................................... .............
Podrías crear un nuevo objeto a partir del anterior.
const grouped = { "daniel-12": [{ id: 1, name: "daniel", age: 12 }, { id: 3, name: "daniel", age: 12 }, { id: 4, name: "daniel", age: 12 }], "jonny-13": [{ id: 2, name: "jonny", age: 13 }] }, result = Object.fromEntries(Object.entries(grouped).map(([k, v]) => [ [k, 'ids', v.map(({ id }) => id).join('-')].join('-'), v ])); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }