[{ "project_name": "test", "status": "High" },{ "project_name": "test", "status": "Critical" },{ "project_name": "test", "status": "Critical" }]Probé mucho con Object.entries, pero no pude alcanzar el resultado que quería.
Rendimiento esperado
[{ project_name: "test", value: 1, status: "High", }, { project_name: "test", value: 2, status: "Critical", }]Lo que quiero hacer no es agregar un valor, sino considerar más objetos en la primera matriz con los mismos valores de estado. Quiero contarlos y agruparlos a todos.
product_name y status .Object.values para obtener los nuevos objetos de la matriz temporal. const data=[{project_name:"test",status:"High"},{project_name:"test",status:"Critical"},{project_name:"test",status:"Critical"}]; const temp = {}; for (const obj of data) { const { project_name, status } = obj; const key = `${project_name}-${status}`; temp[key] ??= { ...obj, value: 0 }; temp[key].value += 1; } console.log(Object.values(temp));Documentación adicional
También puedes usar reduce . Se aplican los mismos principios (pero aquí solo está inicializando un objeto vacío para el acumulador y pasándolo a la siguiente iteración de la matriz), aunque el ciclo puede ser más simple de entender si es nuevo en JS.
const data=[{project_name:"test",status:"High"},{project_name:"test",status:"Critical"},{project_name:"test",status:"Critical"}]; const out = data.reduce((acc, obj) => { const { project_name, status } = obj; const key = `${project_name}-${status}`; acc[key] ??= { ...obj, value: 0 }; acc[key].value += 1; return acc; }, {}); console.log(Object.values(out));