Como Ordenar Arrays de Objetos por Múltiplos Critérios em JavaScript

Como Ordenar Arrays de Objetos por Múltiplos Critérios em JavaScript

Ao manipular dados no front-end ou Node.js, é comum precisar ordenar listas complexas, como organizar eventos por data e desempatar pelo nome. Combinar o método nativo .sort() com String.prototype.localeCompare() garante uma ordenação performática, precisa e resiliente a caracteres especiais e acentuação.

JavaScript

// Exemplo prático: Lista de registros a serem ordenados
const eventos = [
  { data: '2026-10-25', nome: 'Workshop de Redes' },
  { data: '2026-10-20', nome: 'Palestra sobre Cloud' },
  { data: '2026-10-25', nome: 'Bootcamp de Segurança' },
  { data: '2026-10-20', nome: 'Curso de Linux' }
];

// Ordenação encadeada: Primeiro por 'data' (crescente), depois por 'nome' (alfabética)
eventos.sort((a, b) => {
  // Critério 1: Comparação de datas (ordem alfabética/ISO YYYY-MM-DD funciona diretamente)
  const comparacaoData = a.data.localeCompare(b.data);
  
  // Se as datas forem diferentes, retorna o resultado da data
  if (comparacaoData !== 0) {
    return comparacaoData;
  }
  
  // Critério 2: Desempate pelo nome
  return a.nome.localeCompare(b.nome, 'pt-BR', { sensitivity: 'base' });
});

console.log(eventos);
/*
Saída esperada:
[
  { data: '2026-10-20', nome: 'Curso de Linux' },
  { data: '2026-10-20', nome: 'Palestra sobre Cloud' },
  { data: '2026-10-25', nome: 'Bootcamp de Segurança' },
  { data: '2026-10-25', nome: 'Workshop de Redes' }
]
*/
  • Operador de desempate: O retorno de .localeCompare() é -1, 0 ou 1. Se o primeiro critério for diferente de 0, ele é aplicado imediatamente; se for 0, a execução passa para o segundo critério.
  • Resolução de acentuação: O método localeCompare('pt-BR', { sensitivity: 'base' }) ignora diferenças entre maiúsculas/minúsculas e acentos, garantindo a ordem alfabética correta do português.
  • Mutação in-place: O método .sort() altera o array original diretamente. Se precisar preservar a lista original, utilize [...eventos].sort(...) ou o método moderno eventos.toSorted(...).
  • Formato de datas ISO: A comparação direta de strings de data via localeCompare só funciona perfeitamente se o formato estiver padronizado como YYYY-MM-DD. Caso utilize objetos Date, subtraia os timestamps (a.data - b.data).

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *