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.