Group objects by a given key-switch

0

I have three objects:

0{
  conta: "teste",
  data: "01/01/2018"
},
1{
  conta: "teste",
  data: "01/03/2018"
}
2{
  conta: "teste2",
  data: "02/02/2019"
}

I need to group the objects that have the account with the same name, resulting in:

0{
  conta: "teste"{
   0   {
     data:01/01/2018
    },
   1{
     data:01/03/2018
    }
}
1{
conta: "teste2" {
    0{
       data: "02/02/2019"
    }
}
    
asked by anonymous 10.08.2018 / 02:26

1 answer

2

can do with Array.reduce :

let entrada = [
    {
        conta: "teste1",
        data: "01/01/2018"
    },
    {
        conta: "teste1",
        data: "01/03/2018"
    },
    {
        conta: "teste2",
        data: "02/02/2019"
    }
];

let saida = entrada.reduce((retorno, dados) => { 
    retorno[dados.conta] = retorno[dados.conta] || []; 
    retorno[dados.conta].push({ data: dados.data });
    return retorno; 
}, {});


console.log ( saida );

or Array.foreach

let entrada = [
    {
        conta: "teste1",
        data: "01/01/2018"
    },
    {
        conta: "teste1",
        data: "01/03/2018"
    },
    {
        conta: "teste2",
        data: "02/02/2019"
    }
];

let grupo = {};

entrada.forEach( ( valor ) => {
    grupo[valor.conta] = grupo[valor.conta]  || [];
    grupo[valor.conta].push({ data : valor.data });
});

console.log ( grupo );
    
10.08.2018 / 03:55