Tengo una matriz de objetos de la siguiente manera
let data = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: null, } ] }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } }, { name: "Charlie", id: 47, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } } ] } ] Como puede ver, current_result es nulo en un lugar. Así que tengo que modificar los datos para mostrar que current_result no se prueba. Entonces, en este caso, en lugar de mostrar nulo, quiero mostrar lo siguiente. not_tested es 100 y el porcentaje de omisión, error y éxito es 0 en este caso.
current_result: { success_percentage: 0, failure_percentage: 0, skip_percentage: 0, not_tested: 100 } También en otros valores de current_result , dado que no es nulo y tiene valores de success, failure and skip values , not_tested debe ser 0 para esto.
El resultado final debería ser algo como esto. ¿Puede alguien decirme cómo lograr esto, ya que es un poco complicado para mí llegar a una respuesta definitiva?
result = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: { success_percentage: 0, failure_percentage: 0, skip_percentage: 0, not_tested: 100 } } ] }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36, not_tested: 0 } }, { name: "Charlie", id: 47, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36, not_tested: 0 } } ] } ]Puede hacer un bucle en la matriz de projects de data e insertar las claves que desee de esta manera:
let data = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: null, } ] }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } }, { name: "Charlie", id: 47, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } } ] } ] data.forEach(dat => { dat.projects.forEach(prj => { if (!prj.current_result) { prj.current_result = { success_percentage: 0, failure_percentage: 0, skip_percentage: 0, not_tested: 100 }; } else { prj.current_result.not_tested = 0; } }) }) console.log(data)Puede filtrar los datos de sus resultados y asignar un valor predeterminado.
const result = data.map((item) => { const projects = item.projects.map((project) => { if (!project?.current_result) { return { ...project, current_result: { success_percentage: 0, failure_percentage: 0, skip_percentage: 0, not_tested: 100, }, }; } else { return project; } }); console.log(result)Usando Array#map sin mutar los datos originales
const data = [{"vertical_name":"CORE","projects":[{"name":"Alpha","id":187,"current_result":null}]},{"vertical_name":"release","projects":[{"name":"Beta","id":27,"current_result":{"success_percentage":37,"failure_percentage":25,"skip_percentage":36}},{"name":"Charlie","id":47,"current_result":{"success_percentage":37,"failure_percentage":25,"skip_percentage":36}}]}]; const formatted = data.map(item => Object.assign(item, { projects: item.projects.map(project => { if (project.current_result === null) { project.current_result = { success_percentage: 0, failure_percentage: 0, skip_percentage: 0, not_tested: 100 }; } else project.current_result.not_tested = 0; return project; }) })); console.log(formatted);