Tengo una matriz de objetos de la siguiente manera. Básicamente, quiero recorrer los projects.current_result y obtener todos los valores.
let data = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: { success: 0, failure: 0, skip: 0, untested: 100 } } ] }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success: 50, failure: 20, skip: 36, untested: 0 } }, { name: "Charlie", id: 47, current_result: { success: 37, failure: 25, skip: 40, untested: 0 } } ] } ] por ejemplo, quiero obtener valores de success de cada uno de los proyectos y poner todos esos valores en una matriz. Entonces, en este caso, success= [0,50,37] De manera similar, quiero poner valores para failure, skip and untested
failure=[0,20,25] skip=[0,36,40] untested=[100,0,0]Intenté lograr eso con el siguiente código, pero de alguna manera no puedo obtener el resultado deseado. Cualquier consejo sobre cómo corregir este código por favor
let alteredResponse = data.forEach(prj => { prj.reduce((result, { count }) => { result.success.push(count.success|| 0); result.failure.push(count.failure || 0); result.skip.push(count.skip || 0); result.untested.push(count.untested || 0); return result; }, { success: [], failure: [], skip: [], untested: [] }) }); const data = [ { vertical_name: 'CORE', projects: [ { name: 'Alpha', id: 187, current_result: { success: 0, failure: 0, skip: 0, untested: 100 } } ] }, { vertical_name: 'release', projects: [ { name: 'Beta', id: 27, current_result: { success: 50, failure: 20, skip: 36, untested: 0 } }, { name: 'Charlie', id: 47, current_result: { success: 37, failure: 25, skip: 40, untested: 0 } } ] } ]; const result = { success: [], failure: [], skip: [], untested: [] }; data.forEach((prj) => { prj.projects.reduce((_, { current_result }) => { result.success.push(current_result.success || 0); result.failure.push(current_result.failure || 0); result.skip.push(current_result.skip || 0); result.untested.push(current_result.untested || 0); return result; }, result); }); console.log(result);Puedes lograr esto con dos forEach
Lógica
dataprojects desde los nodos en datasuccess , fallidos, skip y failure untested del nodo del project al nodo de resultado respectivo.violín de trabajo
const data = [{"vertical_name":"CORE","projects":[{"name":"Alpha","id":187,"current_result":{"success":0,"failure":0,"skip":0,"untested":100}}]},{"vertical_name":"release","projects":[{"name":"Beta","id":27,"current_result":{"success":50,"failure":20,"skip":36,"untested":0}},{"name":"Charlie","id":47,"current_result":{"success":37,"failure":25,"skip":40,"untested":0}}]}]; const result = { success: [], failure: [], skip: [], untested: [], } const alteredResponse = data.forEach(prj => { prj.projects.forEach((project) => { result.success.push(project.current_result.success); result.failure.push(project.current_result.failure); result.skip.push(project.current_result.skip); result.untested.push(project.current_result.untested); }) }); console.log(result);Podrías probar este enfoque
projectsprojectsprojects para obtener los current_results let data = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: { success: 0, failure: 0, skip: 0, untested: 100, }, }, ], }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success: 50, failure: 20, skip: 36, untested: 0, }, }, { name: "Charlie", id: 47, current_result: { success: 37, failure: 25, skip: 40, untested: 0, }, }, ], }, ] const res = data .map(({ projects }) => projects) .flat() .map(({ current_result }) => current_result) .reduce((acc, el) => { for (const [key, value] of Object.entries(el)) { if (!acc[key]) { acc[key] = [value] } else { acc[key].push(value) } } return acc }, {}) console.log(res)