Tengo debajo de la estructura del objeto en la matriz
[ { "modules":set of modules here "details": [ { "name":"abc" "version":"1.2.3" }, { "name":"def" "version":"2.3.4" }, { "name":"ghi" "version":"4.5.6" } ] }, { "modules":set of modules here "details": [ { "name":"jkl" "version":"7.8.9" }, { "name":"mno" "version":"10.11.12" }, { "name":"pqr" "version":"13.14.15" } ] } ]Lo que quiero hacer es: obtener una matriz de detalles transformada en el siguiente formato para cada objeto raíz en la matriz maestra como
"details": [ { module:"jkl:7.8.9" }, { module:"mno:10.11.12" }, { module:"pqr:13.14.15" } ]Entonces la matriz final sería:
[ { "modules":set of modules here "details": [ { "module":"abc:1.2.3" }, { "module":"def:2.3.4" }, { "module":"ghi:4.5.6" } ] }, { "modules":set of modules here "details": [ { "module":"jkl:7.8.9" }, { "module":"mno:10.11.12" }, { "module":"pqr:13.14.15" } ] } ]Lo que he probado y funciona es:
rootArray.forEach((entry)=> { let line = entry.details.map((detailEntry)=>{ //merge detailEntry into single line }) entry.details = line });Mi pregunta es: ¿es este un enfoque correcto o hay alguna solución mejor disponible?
const data = [ { "modules": "set of modules here", "details": [ { "name":"abc", "version":"1.2.3" }, { "name":"def", "version":"2.3.4" }, { "name":"ghi", "version":"4.5.6" } ] }, { "modules": "set of modules here", "details": [ { "name":"jkl", "version":"7.8.9" }, { "name":"mno", "version":"10.11.12" }, { "name":"pqr", "version":"13.14.15" } ] } ] const result = data.map( item => ({modules: item.modules, details: item.details.map(i => { return { module: `${i["name"]}:${i["version"]}` } })})) console.log(result)su enfoque parece correcto.
hay otra forma de lograr la estructura esperada, pero haciendo la copia de la matriz inicial en lugar de modificar la existente.
const result = rootArray.map(({ details, ...rest }) => ({ details: details.map(/*transform*/), ...rest ));Dos map es probablemente el enfoque correcto. Devolverá una nueva matriz en lugar de mutar la matriz original.
map sobre la matriz de datos principal y luego asigne el resultado de mapear sobre details a la propiedad de details del objeto que está devolviendo en cada iteración.
const data=[{modules:"set of modules here",details:[{name:"abc",version:"1.2.3"},{name:"def",version:"2.3.4"},{name:"ghi",version:"4.5.6"}]},{modules:"set of modules here",details:[{name:"jkl",version:"7.8.9"},{name:"mno",version:"10.11.12"},{name:"pqr",version:"13.14.15"}]}]; const out = data.map(obj => { return { modules: obj.modules, details: obj.details.map(detail => { const { name, version } = detail; return { module: `${name}:${version}` }; }) }; }); console.log(out);Documentación adicional