Como novato, estoy buscando el mejor enfoque para lograr lo siguiente:
Aquí está la matriz que obtengo de mi consulta de base de datos que contiene una combinación izquierda en la tabla de "clase"
[ {"legnumber":1, "classcode" : "J"}, {"legnumber":1, "classcode" : "Y"}, {"legnumber":2, "classcode" : "J"} ]Y me gustaría obtener algo como esto:
{ "legs": [ { "legnumber" : 1, "classes" : [ {"classcode" : "J"}, {"classcode" : "Y"} ] }, { "legnumber" : 2, "classes" : [ {"classcode" : "J"} ] } ] }Muchas gracias por tus sugerencias. Estoy usando Sequelize en este proyecto, pero estoy escribiendo consultas sin procesar porque me resulta más conveniente para mi modelo de base de datos.
Saludos, nico
Puede agrupar los elementos de su matriz según el número de legnumber usando array#reduce y luego obtener todos los valores para crear su resultado usando Object.values() .
const arr = [ {"legnumber":1, "classcode" : "J"}, {"legnumber":1, "classcode" : "Y"}, {"legnumber":2, "classcode" : "J"} ], output = arr.reduce((r, {legnumber, classcode}) => { r[legnumber] ??= {legnumber, classes: []}; r[legnumber].classes.push({classcode}); return r; },{}), result = {legs: Object.values(output)}; console.log(result);La respuesta de Hassan es la forma más concisa de manejar esto, pero aquí hay una opción más detallada para ayudar a comprender lo que está sucediendo:
const queryResults = [ { legnumber: 1, classcode: 'J' }, { legnumber: 1, classcode: 'Y' }, { legnumber: 2, classcode: 'J' }, ] // create an object to store the transformed results const transformedResults = { legs: [], } // loop through each item in the queryResult array for (const result of queryResults) { // try to find an existing leg tha matches the current leg number let leg = transformedResults.legs.find((leg) => leg.legnumber === result.legnumber) // if it doesn't exist then create it and add it to the transformed results if (!leg) { leg = { legnumber: result.legnumber, classes: [], } transformedResults.legs.push(leg) } // push the classcode leg.classes.push({ classcode: result.classcode }) } console.log(transformedResults)