I have a json in the below format that I transformed from a Python dataframe.
[{"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}]
I want it to be in this format in javascript, but I don't know how to do it correctly:
[{"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]}}
}]
CodePudding user response:
I hope this can help you.
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);
CodePudding user response:
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);