Tengo un json en el siguiente formato que transformé a partir de un marco de datos de Python.
[{"sigla_uf": "AC", "ano": 2020, "mes": 1, "admitidos": 2939, "desligados": 2520, "saldo_movimentacao": 419}, {"sigla_uf": "AC", "ano": 2020, "mes": 2, "admitidos": 3147, "desligados": 2182, "saldo_movimentacao": 965}, {"sigla_uf": "AC", "ano": 2020, "mes": 3, "admitidos": 2874, "desligados": 2689, "saldo_movimentacao": 185}, {"sigla_uf": "RJ", "ano": 2020, "mes": 1, "admitidos": 2939, "desligados": 2520, "saldo_movimentacao": 419}, {"sigla_uf": "RJ", "ano": 2020, "mes": 2, "admitidos": 3147, "desligados": 2182, "saldo_movimentacao": 965}, {"sigla_uf": "RJ", "ano": 2020, "mes": 3, "admitidos": 2874, "desligados": 2689, "saldo_movimentacao": 185}]Quiero que esté en este formato en javascript, pero no sé cómo hacerlo correctamente:
[{"AC": {"ano": [2020, 2020, 2020], "mes": [1, 2, 3], "admitidos": [2939, 3147, 2874], "desligados": [2520, 2182, 2689], "saldo_movimentacao": [419, 965, 185]}, {"RJ": {"ano": [2020, 2020, 2020], "mes": [1, 2, 3], "admitidos": [2939, 3147, 2874], "desligados": [2520, 2182, 2689], "saldo_movimentacao": [419, 965, 185]}} }]Espero que esto pueda ayudarte.
const test = [ { sigla_uf: "AC", ano: 2020, mes: 1, admitidos: 2939, desligados: 2520, saldo_movimentacao: 419, }, { sigla_uf: "AC", ano: 2020, mes: 2, admitidos: 3147, desligados: 2182, saldo_movimentacao: 965, }, { sigla_uf: "AC", ano: 2020, mes: 3, admitidos: 2874, desligados: 2689, saldo_movimentacao: 185, }, { sigla_uf: "RJ", ano: 2020, mes: 1, admitidos: 2939, desligados: 2520, saldo_movimentacao: 419, }, { sigla_uf: "RJ", ano: 2020, mes: 2, admitidos: 3147, desligados: 2182, saldo_movimentacao: 965, }, { sigla_uf: "RJ", ano: 2020, mes: 3, admitidos: 2874, desligados: 2689, saldo_movimentacao: 185, }, ]; const format = (arr) => { const result = {}; arr.forEach((val) => { const { sigla_uf, ...rest } = val; const keys = Object.keys(rest); let res = {}; if (result[sigla_uf]) { res = result[sigla_uf]; } keys.forEach((key) => { if (!res[key]) { res[key] = [rest[key]]; } else { res[key] = res[key].concat(rest[key]); } }); result[sigla_uf] = { ...res, }; }); return Object.keys(result).map((key) => ({ [key]: result[key] })); }; const res = format(test); console.log("res", res);let acList = { ano: [], mes: [], admitidos: [], desligados: [], saldo_movimentacao: [] }; let rjList = { ano: [], mes: [], admitidos: [], desligados: [], saldo_movimentacao: [] }; let data = [ { sigla_uf: "AC", ano: 2020, mes: 1, admitidos: 2939, desligados: 2520, saldo_movimentacao: 419 }, { sigla_uf: "AC", ano: 2020, mes: 2, admitidos: 3147, desligados: 2182, saldo_movimentacao: 965 }, { sigla_uf: "AC", ano: 2020, mes: 3, admitidos: 2874, desligados: 2689, saldo_movimentacao: 185 }, { sigla_uf: "RJ", ano: 2020, mes: 1, admitidos: 2939, desligados: 2520, saldo_movimentacao: 419 }, { sigla_uf: "RJ", ano: 2020, mes: 2, admitidos: 3147, desligados: 2182, saldo_movimentacao: 965 }, { sigla_uf: "RJ", ano: 2020, mes: 3, admitidos: 2874, desligados: 2689, saldo_movimentacao: 185 } ]; data.forEach(({ sigla_uf, ano, mes, admitidos, desligados, saldo_movimentacao }) => { if(sigla_uf === "AC") { acList.ano = [ ...acList.ano, ano]; acList.mes = [ ...acList.mes, mes]; acList.admitidos = [ ...acList.admitidos, admitidos]; rjList.desligados = [ ...rjList.desligados, desligados]; acList.saldo_movimentacao = [ ...acList.saldo_movimentacao, saldo_movimentacao]; } else { rjList.ano = [ ...rjList.ano, ano]; rjList.mes = [ ...rjList.mes, mes]; rjList.admitidos = [ ...rjList.admitidos, admitidos]; rjList.desligados = [ ...rjList.desligados, desligados]; rjList.saldo_movimentacao = [ ...rjList.saldo_movimentacao, saldo_movimentacao]; } }); // shape it however you like :) let result = [{ acList, rjList }] console.log(result);