Aproveite o mês das
carreiras na Alura

Até 44% OFF

Falta pouco!

00

DIAS

00

HORAS

00

MIN

00

SEG

Ordenação de números no JavaScript não funciona?

Alura
Sérgio Lopes
Sérgio Lopes

Compartilhe

Introdução

Imagem de destaque #cover

Digamos que você tem um array de números em JavaScript:


var lista = [10,1, 5, 9, 8, 12, 15];

E queremos ordená-lo. O que fazer? Usar a função sort() claro!


lista.sort(); // [1, 10, 12, 15, 5, 8, 9]

Repare no resultado: não está na ordem esperada. Essa questão foi trazida ao fórum da Alura pelo Jean Cesar Batista.

A grande questão é que a função sort() usa por padrão a ordenação alfabética baseada na tabela Unicode. Apesar de inesperado isso está documentado. A solução é usar a nossa própria função de comparação.

Banner da Imersão de IA da Alura com Google Gemini. Participe de aulas gratuitas online com certificado. Domine as inovações mais recentes da IA.

Implementando função de comparação

O sort recebe opcionalmente uma função de comparação que, dados dois valores, deve devolver um número inteiro:

  • Se for 0 indica que são iguais
  • Se for -1 indica que o primeiro valor é menor
  • Se for 1, o segundo é menor.

Podemos criar essa função:


function comparaNumeros(a,b) { if (a == b) return 0; if (a < b) return -1; if (a > b) return 1; }

E chamamos o sort passando a função:


lista.sort(comparaNumeros); // [1, 5, 8, 9, 10, 12, 15]

Funciona!

Simplicando a implementação

E, claro, podemos simplificar bastante esse código.

É possível trocar a função nomeada pra ser anônima. E trocar os três IFs por uma conta simples: a - b.

Repare que o resultado dessa conta é sempre 0 se forem iguais, -1 se a é menor e 1 se b é menor. Exatamente o que precisamos.

Juntanto tudo isso com a sintaxe de arrow functions do ES6 pra escrever menos, podemos simplesmente fazer:


lista.sort((a, b) => a - b); // [1, 5, 8, 9, 10, 12, 15]

O que achou? Bem enxuto, concorda? Aproveite e deixe o seu comentário sobre o que achou da ordenação de array no JavaScript.

Sérgio Lopes
Sérgio Lopes

Sérgio é diretor e líder do time de diversos times no Grupo Caelum, formado em Ciência da Computação pela USP. É reconhecido por sua atuação em Front-end, Performance, Mobile e Arquitetura de software e tem vasta experiência com ensino, tanto presencial quanto online. Gerencia os projetos internos da empresa e atua na definição de rumos dos produtos e da empresa em geral.

Veja outros artigos sobre Front-end