Ordem Alfabética: por que .sort() puro ordena "Zebra" antes de "árvore"
O método .sort() padrão do JavaScript, sem um comparador
específico, ordena strings pelo valor numérico do ponto de
código Unicode de cada caractere — não pela ordem alfabética
que um leitor de português esperaria. Isso produz um resultado
contraintuitivo real: como as letras maiúsculas ocupam uma faixa
Unicode numericamente menor que as minúsculas (A=65 a Z=90, enquanto
a=97 a z=122), e caracteres acentuados ocupam pontos de código ainda
mais altos (á=225, por exemplo), uma ordenação "crua" por ponto de
código coloca toda palavra iniciada por maiúscula antes de qualquer
palavra minúscula, e qualquer palavra acentuada por último — "Zebra"
aparece antes de "árvore", porque 'Z' (90) é numericamente menor que
'á' (225), mesmo 'á' vindo antes de 'z' no alfabeto que um falante de
português reconhece.
A correção: localeCompare(), não uma comparação de valor bruto
A forma correta de ordenar texto respeitando convenções linguísticas
reais é usar String.prototype.localeCompare() como
função de comparação do .sort(), em vez de deixar o
JavaScript comparar os valores Unicode brutos. localeCompare()
aplica regras de collation (ordenação linguística)
específicas do idioma — em português, isso significa tratar "á" como
uma variante de "a" para fins de ordem alfabética (posicionando-a perto
de outras palavras com "a", não isolada por seu valor numérico alto), e
ignorar diferença de maiúscula/minúscula para decidir a ordem primária
entre palavras.
Por que isso importa além de listas alfabéticas simples
Qualquer sistema que ordena nomes de usuário, produtos ou qualquer lista de texto em português para exibição — não só uma ferramenta dedicada de "colocar em ordem alfabética" — enfrenta esse mesmo problema se usar ordenação padrão sem comparador. Um catálogo de produtos que ordena "Zabumba" antes de "Água" é um bug de UX real, silencioso até alguém notar que a lista "parece fora de ordem" — e a causa raiz é sempre a mesma: comparação por valor Unicode bruto em vez de collation linguística apropriada ao idioma do conteúdo.