Hola, estoy tratando de volver a empaquetar una matriz de objetos y convertirla en un objeto con claves específicas. Así que aquí está la matriz:
const entryPenaltyGroups = [ { entryId: 16, intervalId: 8, penaltyTime: 16000 }, { entryId: 16, intervalId: 10, penaltyTime: 6000 } ]El resultado esperado debe ser:
{ '8': { penaltyTime: 16000 }, '10': { penaltyTime: 6000 } }Probé algo con map() , pero no obtuve los resultados esperados.
for (const entry of entryPenaltyGroups) { entry.map(x => [{ [x.intervalId]: { penaltyTime: x.intervalId }, }]) }¿Debería usar reduce () en su lugar, tal vez?
Puede mapear la matriz en pares [key, value] y luego usar Object.fromEntries para convertir la matriz mapeada en un solo objeto:
Object.fromEntries(entryPenaltyGroups.map( ({intervalId, penaltyTime}) => [intervalId, {penaltyTime}] ))Alternativamente:
Object.fromEntries(entryPenaltyGroups.map( entry => [entry.intervalId, {penaltyTime: entry.penaltyTime}] ))Si hay claves duplicadas, se utilizará la última aparición en el objeto resultante.
Una solución con reduce . Esto anulará el elemento si tienen el mismo ID de intervalId , pero OP comentó que esto no es un problema para ellos
const entryPenaltyGroups = [ { entryId: 16, intervalId: 8, penaltyTime: 16000 }, { entryId: 16, intervalId: 10, penaltyTime: 6000 } ] const result = entryPenaltyGroups.reduce( (acc,cur) => { acc[cur.intervalId] = {penaltyTime: cur.penaltyTime}; return acc; } ,{}) console.log(result) const entryPenaltyGroups = [ { entryId: 16, intervalId: 8, penaltyTime: 16000 }, { entryId: 16, intervalId: 10, penaltyTime: 6000 } ] const formatted = {} for(entry of entryPenaltyGroups){ formatted[entry.intervalId] = {penaltyTime: entry.penaltyTime} } console.log(formatted)