NOTA: este artigo não está concluído.

Para ordenar um array de forma descendente, passamos uma função como parâmetro para a função sort. Essa função parâmetro necessita de dois argumentos, aqui discriminados como a e b.

Essa função funciona assim:

  • Se o valor retornado for menor que zero, considera-se que a é menor que b.

  • Se o valor retornado for maior que zero, considera-se que a é maior que b.

  • Se o valor retornado for zero, considera-se que ambos são iguais.

Ainda, se um array é, por exemplo, [25, 8], a engine JavaScript transforma os valores em strings, e nesse caso, '25' é menor que '8'. É aí que a nossa função de ordenação precisa de uma segunda função para ajudar na decisão.

Imagine o seguinte array:

1
var arr = '10 19 1 4 8 21'.split(' ');

Agora, façamos a ordenação.

Ascendente
1 2 3
var sorted = arr.sort(function(a, b) { return (a - b); });
Descendente
1 2 3
var sorted = arr.sort(function(a, b) { return (a - b) * -1; });

A versão abaixo produz o mesmo resultado de ordenação descendente, mas veja a diferença na implementação.

1 2 3
var sorted = arr.sort(function(a, b) { return b - a; });

Podemos, ainda, criar a função e passar como parâmetro sem utilizar uma função anônima.

1 2 3
var customSortDesc = function customSortDesc(arg1, arg2) { return arg2 - arg1; };

E chamar dessa forma:

1
arr.sort(customSortDesc);

IMPORTANTE: Note que não são utilizados parenteses na função parâmetro quando esta está sendo passada para a função sort (lembre-se: em JavaScript, funções são objetos de primeira classe).