Estoy tratando de agrupar una matriz de objetos por un valor de uno de los objetos secundarios.
Me estoy poniendo quiero quiero usar reducir, pero parece estar combinando el grupo por valor donde los objetos principales son comunes.
let name = [ { issue: "89", status: ["test", "prod", "dev"] }, { issue: "45", status: ["dev"] } ]; const groups = name.reduce((groups, item) => { const group = groups[item.status] || []; group.push(item); groups[item.status] = group; return groups; }, {}); console.log(JSON. stringify(groups));obtengo los siguientes resultados
{ "test,prod,dev":[ { "issue":"89", "status":[ "test", "prod", "dev" ] } ], "dev":[ { "issue":"45", "status":[ "dev" ] } ] }Lo que me gusta es que produzca lo siguiente:
{ "prod":[ { "issue":"89", "status":[ "test", "prod", "dev" ] } ], "test":[ { "issue":"89", "status":[ "test", "prod", "dev" ] } ], "dev":[ { "issue":"45", "status":[ "dev" ] }, { "issue":"89", "status":[ "test", "prod", "dev" ] } ] }No estoy seguro de cómo producir mis resultados deseados fácilmente.
muchas gracias
const group = Object.assign({}, ...name.reduce((p, c) => [...p, ...c.status], []) .filter((v, i , a) => a.indexOf(v) === i) .map(item => ({ [item]: name.filter(old => old.status.includes(item)) })))Debe agrupar su objeto según el estado. Puede usar array#reduce con array#forEach .
const names = [ { issue: "89", status: ["test", "prod", "dev"] }, { issue: "45", status: ["dev"] } ], result = names.reduce((r, o) => { o.status.forEach(name => { r[name] ??= []; r[name].push(JSON.parse(JSON.stringify(o))); }); return r; },{}); console.log(result);