Como Agrupar Elementos de um Array em JavaScript com Object.groupBy
O método nativo Object.groupBy() simplifica a organização de elementos de um array com base em critérios ou propriedades específicas. Ele elimina a necessidade de escrever rotinas complexas com Array.prototype.reduce() ou dependências externas como Lodash para agrupar dados de forma limpa.
JavaScript
// Array de objetos com dados de produtos
const produtos = [
{ nome: 'Teclado', categoria: 'Eletrônicos', preco: 150 },
{ nome: 'Cadeira', categoria: 'Móveis', preco: 350 },
{ nome: 'Mouse', categoria: 'Eletrônicos', preco: 80 },
{ nome: 'Mesa', categoria: 'Móveis', preco: 500 }
];
// Agrupamento por propriedade simples
const porCategoria = Object.groupBy(produtos, produto => produto.categoria);
// Agrupamento por condição dinâmica
const porFaixaDePreco = Object.groupBy(produtos, produto => {
return produto.preco > 200 ? 'caro' : 'acessivel';
});
// Exemplos de uso prático funcionando
console.log('Agrupados por categoria:', porCategoria);
/*
Saída:
{
Eletrônicos: [{ nome: 'Teclado', ... }, { nome: 'Mouse', ... }],
Móveis: [{ nome: 'Cadeira', ... }, { nome: 'Mesa', ... }]
}
*/
console.log('Agrupados por faixa de preço:', porFaixaDePreco);
Pontos-chave
- Retorno em Objeto Nulo/Padrão: O
Object.groupBy()retorna um objeto nulo (sem protótipo de objeto comum), cujas chaves correspondem às strings retornadas pela função de callback de agrupamento. - Função Callback Iterativa: A função de callback recebe o elemento atual, o índice e o array completo como parâmetros, permitindo lógicas de agrupamento flexíveis e dinâmicas.
- Imutabilidade: O método é totalmente não mutável, ou seja, cria uma nova estrutura sem alterar o array de dados original.
- Diferença para
Map.groupBy: Caso precise utilizar objetos ou chaves não-string (como números ou booleans mantidos como tipos primitivos/referências), prefira a API irmãMap.groupBy().
