Ordenamento em JavaScript

sort()

O método sort() de uma instância de Array ordena os elementos que o compõem e retorna a referência do mesmo array. O comportamento padrão de sort() é ordenar de maneira ascendente, convertendo seus elementos em strings e comparando cada caractere em seus valores UTF-16.

Como o método sort() retorna o array ordenado no mesmo espaço de memória onde o array original estava armazenado, esse método é considerado "destrutivo". Ao utilizar sort(), perde-se o array original.

Demo

Array.sort()

// criação do array original let strings = ["daniel", "ama", "jordan"]; console.log(strings);
// ordenamento dos elementos do array alfabeticamente strings.sort(); console.log(strings);



Ordenar números

O método sort(), por padrão, trata todos os elementos que compõem o array como string. Se o array armazena os valores [100, 4, 20], o método ordenará os elementos da seguinte forma:

  • Primeiro, os números inteiros serão convertidos em strings: ["100", "2", "40"]
  • Pegue o primeiro caractere que compõe os strings (nesse caso: '1', '4' e '2')
  • Ordene as strings comparando o valor dos caracteres na tabela UTF-16

Como '1' é menor que '4' e '2', o elemento "100" ficará na primeira posição. O array ordenado pelo método sort() retornará ["100", "20", "4"].

Para o método ordenar corretamente números, tanto de maneira ascendente quanto decrescente, é necessário instruir o método como os elementos devem ser comparados.

Array.sort()

// criação do array original let nums = [100, 4, 20]; console.log(nums);
// ordenar array sem instrução nums.sort(); console.log(nums);
// ordenamento dos elementos do array de maneira ascendente nums.sort((a, b) => a - b); console.log(nums);
// ordenamento dos elementos do array de maneira descendente nums.sort((a,b) => b - a); console.log(nums);







O sort() reconhece a ordem entre dois elementos ao subtrair os valores de um pelo outro.

  • Se o valor for negativo ou 0, não é necessário trocar a ordem entre os dois elementos
  • Se o valor for positivo, troque a ordem entre os dois elementos

Comportamento Destrutivo

O método sort() altera as ordens dos valores diretamente no espaço de memória onde está armazenado o array original. Ou seja: invocou sort(), perdeu o array original.

Array.sort()

// criação do array original let cidades = ["brasilia", "belo horizonte", "salvador", "porto seguro"]; console.log(cidades);
// tentativa de criar cópia let cidadesOrd = cidades.sort(); console.log(cidades); console.log(cidadesOrd);