Tengo este objeto JSON:
{ "columnNames": [ "Incident ID", "IncidentType" ], "rows": [ [ "3599590", "Telecommuting/VWA Empl- Initiate" ], [ "3599601", "Telecommuting/VWA Empl- Initiate" ] ] }Me gustaría convertir ese objeto en Javascript a este objeto:
{ reportResults: [{ "Incident ID": "3599590", "IncidentType": "Telecommuting/VWA Empl- Initiate" }, { "Incident ID": "3599591", "IncidentType": "Telecommuting/VWA Empl- Initiate" } ] }He intentado usar la función push en el siguiente ejemplo:
VWA_Output = { "columnNames": [ "Incident ID", "IncidentType" ], "rows": [ [ "3599590", "Telecommuting/VWA Empl- Initiate" ], [ "3599601", "Telecommuting/VWA Empl- Initiate" ] ] }; JSTest_JSON_Var1 = { reportResults: [] }; for (i in VWA_Output.rows) { for (var j in VWA_Output.rows[i]) { var key = VWA_Output.columnNames[j]; var value = VWA_Output.rows[i][j] JSTest_JSON_Var1.reportResults.push({ [key]: value }); } } console.log(JSTest_JSON_Var1);Sin embargo, parece crear el objeto de esta manera con la colección como un elemento de matriz individual:
{ [{ "reportResults": [{ "Incident ID": "3599590" }, { "IncidentType": "Telecommuting/VWA Empl- Initiate" } }, { "Incident ID": "3599591" }, { "IncidentType": "Telecommuting/VWA Empl- Initiate" } }] }Me gustaría que la colección de columnas y filas sea una única colección de registros en la matriz:
{ "reportResults": [{ "Incident ID": "3599590", "IncidentType": "Telecommuting/VWA Empl- Initiate" }, { "Incident ID": "3599591", "IncidentType": "Telecommuting/VWA Empl- Initiate" }] }¡Gracias!
Supongamos que sus datos de ejemplo están en data :
const result = { "reportResults" : data.rows.map(row => { return { [data.columnNames[0]]: row[0], [data.columnNames[1]]: row[1] } }) }Defina los resultados del reportResults todos a la vez: haga que su contenido sea una matriz asignada desde las rows , donde use el índice del nombre de la columna sobre la que está iterando para acceder al valor de fila apropiado. Object.fromEntries para mantener las cosas concisas.
const input = { "columnNames": [ "Incident ID", "IncidentType" ], "rows": [ [ "3599590", "Telecommuting/VWA Empl- Initiate" ], [ "3599601", "Telecommuting/VWA Empl- Initiate" ] ] }; const output = { reportResults: input.rows.map(row => Object.fromEntries( input.columnNames.map((name, i) => [name, row[i]]) )) }; console.log(output);esa es mi solucion:
var data = { "columnNames": [ "Incident ID", "IncidentType" ], "rows": [ [ "3599590", "Telecommuting/VWA Empl- Initiate" ], [ "3599601", "Telecommuting/VWA Empl- Initiate" ] ] } var reportResults = data.rows.map((row) => Object.assign({}, ...row.map((cell, i) => ({ [data.columnNames[i]]: cell}))) ) console.log({reportResults})No óptimo, pero corto)