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()
// 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()
// 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()
// tentativa de criar cópia let cidadesOrd = cidades.sort(); console.log(cidades); console.log(cidadesOrd);