Gerenciar, classificar e manipular dados com o JavaScript é uma habilidade que frequentemente delegamos a bibliotecas de terceiros, como a lodash. Entretanto, à medida que a linguagem JavaScript progride, esses recursos acabam sendo adicionados à especificação JavaScript. Duas dessas APIs para agrupamento de Array dados são `Array.prototype.group e Array.prototype.groupToMap.

Array.prototype.group

Para agrupar uma matriz de objetos por uma determinada propriedade, chame a função group com a função que retorna a string de agrupamento:

const teams = [
  { name: "Arsenal", origin: "London", tier: "legendary" },
  { name: "Manchester United", origin: "Manchester", tier: "legendary" },
  { name: "Liverpool", origin: "Liverpool", tier: "legendary" },
  { name: "Newcastle United", origin: "Newcastle", tier: "mid" },
  // Lol, awful club
  { name: "Tottenham", origin: "London", tier: "lol" },
];

const tieredTeams = teams.group(({ tier }) => tier);

O resultado da função de agrupamento da matriz group é um objeto com chaves que correspondem à chave de agrupamento:

{
  legendary: [
    {name: "Arsenal", origin: "London", tier: "legendary"},
    {name: "Manchester United", origin: "Manchester", tier: "legendary"},
    {name: "Liverpool", origin: "Liverpool", tier: "legendary"}
  ], 
  mid: [
    {name: "Newcastle United", origin: "Newcastle", tier: "mid"}
  ], 
  lol: [
    {name: "Tottenham", origin: "London", tier: "lol"}
  ]
}

Array.prototype.groupToMap

groupToMap retorna um Map em vez de um literal de objeto:

const tieredTeamsMap = teams.group(({ tier }) => tier);

tieredTeamsMap.has('lol') // true

tieredTeamsMap.get('lol') // [{name: "Tottenham", origin: "London", tier: "lol"}]

Até o momento da publicação, group e groupToMap estão disponíveis apenas no Safari. Esses dois métodos são cruciais para o avanço do gerenciamento de dados. Quer o senhor esteja manipulando dados no cliente ou no servidor, esses métodos nativos recém-adicionados são muito bem-vindos.