Ordenar um array de objetos em JavaScript

Ordenar um array de objetos em JavaScript (gerador de comparador) | We.Inc

Monte um comparador com cliques: ordene objetos por número, texto, data ou duas chaves, com opções de localeCompare, e veja o resultado e o código lado a lado.

Ordenar um array de objetos em JavaScript

Passe para o sort uma função de comparação que olhe a propriedade que importa. Para números, retorne a.price - b.price. Para texto, retorne a.name.localeCompare(b.name). Para datas, subtraia os timestamps. Um resultado negativo coloca a primeiro, um positivo coloca b primeiro. Use toSorted em vez de sort quando a ordem original precisar ser preservada.

Comparador para cada tipo de chave

Ordenar objetos confunde as pessoas por três motivos: o sort padrão compara tudo como texto, letras maiúsculas vêm antes das minúsculas em uma comparação simples com menor que, e o sort reescreve o array que você passa para ele. O gerador abaixo permite mudar cada uma dessas opções em uma pequena lista de equipe e ver a ordem mudar, com o comparador correspondente pronto para copiar.

Perguntas frequentes

Como ordeno um array de objetos por uma propriedade?

Chame people.sort((a, b) => a.age - b.age) para uma propriedade numérica ou people.sort((a, b) => a.name.localeCompare(b.name)) para uma string. Troque a e b para inverter a direção.

Como ordeno por dois campos?

Compare o primeiro campo e só passe para o segundo quando o primeiro empatar: (a, b) => a.team.localeCompare(b.team) || a.age - b.age. O || funciona porque um empate retorna 0, que conta como false.

O sort do JavaScript é estável?

Sim. Desde o ECMAScript 2019 o sort precisa ser estável, então itens considerados iguais mantêm a ordem anterior. É por isso que ordenar primeiro por nome e depois por equipe gera uma lista agrupada por equipe, com os nomes em ordem dentro de cada grupo.

O sort altera o array original?

Sim. O sort reordena o array no lugar e retorna esse mesmo array. O toSorted aceita a mesma função de comparação, mas retorna um array novo e não mexe na ordem original. Ele está disponível nos principais navegadores desde julho de 2023.

Por que nomes em minúsculas ficam depois dos em maiúsculas?

Uma comparação simples com < ou > compara códigos de caracteres, e toda letra maiúscula tem código menor que qualquer minúscula. O localeCompare segue o alfabeto do idioma e, com { sensitivity: 'base' }, também trata acentos e maiúsculas como iguais.

O que a função de comparação realmente retorna

Datas, valores ausentes e tipos misturados

Por que o sort() simples erra com números

Sem uma função de comparação, cada elemento é convertido em string e comparado por unidades de código UTF-16, então o primeiro caractere decide.

Ordem padrão versus um comparador numérico

O padrão coloca 100 antes de 25 porque o texto '1' vem antes de '2'.

Ordenação por várias chaves, sensível ao idioma e sem mutação

Equipe de A a Z, depois o mais velho primeiro, sem mexer no original

A cadeia de || só passa para a próxima chave quando a comparação anterior é 0. O toSorted retorna um array novo.

Um único Intl.Collator para uma lista longa

numeric: true coloca T-2 antes de T-10, e sensitivity: 'base' ignora maiúsculas e acentos.

Um helper sortBy reutilizável

Passe os nomes das chaves em ordem. Um sinal de menos antes de uma chave ordena essa chave de forma decrescente.

Gerador de comparador

Escolha como ordenar a lista de equipe de exemplo e a tabela e o código se atualizam juntos.

Ordenar por

Depois por (desempate)

Nada

Direção

Crescente

Decrescente

Comparação de texto

Simples com < e >

localeCompare

localeCompare, numérico e sem diferenciar maiúsculas

Lista de exemplo usada pelo gerador de comparador (ordem original)

Resultado do comparador

Comparador

Copiar código

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site