O método sort() classifica uma matriz em ordem alfabética:

var frutas = ["Banana", "Laranja", "Maçã", "Manga"];
frutas.sort();   // Ordena os elementos de frutas

Reversão de uma matriz

O método reverse() reverte os elementos em uma matriz.

Você pode usá-lo para classificar uma matriz em ordem decrescente:

var frutas = ["Banana", "Laranja", "Maçã", "Manga"];
frutas.sort();      // Primeiro os elementos de frutas são ordenados
frutas.reverse();   // Então a ordem dos elementos é revertida

Classificação Numérica

Por padrão, a função sort() classifica valores como textos.

Isso funciona bem para textos ("Maçã" vem antes de "Banana").

No entanto, se os números forem classificados como textos, "25" será maior que "100", porque "2" será maior que "1".

Por esse motivo, o método sort() produzirá resultados incorretos ao classificar números.

Você pode corrigir isso fornecendo uma função de comparação :

var pontos = [40, 100, 1, 5, 25, 10];
pontos.sort(function(a, b){return a - b});

Use o mesmo truque para classificar uma matriz descendente:

var pontos = [40, 100, 1, 5, 25, 10];
pontos.sort(function(a, b){return b - a});

A Função de Comparação na Ordenação

O objetivo da função de comparação é definir uma ordem de classificação alternativa.

A função de comparação deve retornar um valor negativo, zero ou positivo, dependendo dos argumentos:

function(a, b){return a - b}

Quando a função sort() compara dois valores, envia os valores para a função de comparação e classifica os valores de acordo com o valor retornado (negativo, zero, positivo).

Se o resultado for negativo, é classificado anteriormente b.

Se o resultado for positivo, é classificado anteriormente a.

Se o resultado for 0, nenhuma alteração será feita com a ordem de classificação dos dois valores.

A função de comparação compara todos os valores na matriz, dois valores por vez (a, b).

Ao comparar 40 e 100, o método sort() chama a função de comparação (40, 100).

A função calcula 40 - 100 (a - b) e, como o resultado é negativo (-60), a função de classificação classificará 40 como um valor menor que 100.

Você pode usar este snippet de código para experimentar a classificação numérica e alfabética.

<button onclick="ordenarAlfabeticamente()">Ordenar alfabeticamente</button>
<button onclick="ordenarNumericamente()">ordenar numericamente</button>
<p id="demo"></p>
<script>
   var pontos= [40, 100, 1, 5, 25, 10];
   document.getElementById("demo").innerHTML = pontos;
   function ordenarAlfabeticamente() {
      pontos.sort();
      document.getElementById("demo").innerHTML = pontos;
}
function ordenarNumericamente() {
   pontos.sort(function(a, b){return a - b});
   document.getElementById("demo").innerHTML = pontos;
}
</script>

Classificando uma matriz em ordem aleatória

var pontos = [40, 100, 1, 5, 25, 10];
pontos.sort(function(a, b){return 0.5 - Math.random()});

Encontre o valor mais alto (ou mais baixo) da matriz

Não há funções internas para localizar o valor máximo ou mínimo em uma matriz.

No entanto, depois de classificar uma matriz, você pode usar o índice para obter os valores mais alto e mais baixo.

Classificação ascendente:

var pontos = [40, 100, 1, 5, 25, 10];
pontos.sort(function(a, b){return a - b});
// nagora ow pontos[0] contém o menor valor
// epontos[points.length-1] contém o maior valor

Classificação decrescente:

var pontos = [40, 100, 1, 5, 25, 10];
pontos.sort(function(a, b){return b - a});
// agora pontos[0] contém o maior valor
// e pontos [points.length-1] contém o menor valor

Classificar uma matriz inteira é um método muito ineficiente se você deseja apenas encontrar o valor mais alto (ou mais baixo).

Usando Math.max () em uma Matriz

Você pode usar Math.max.apply para encontrar o número mais alto em uma matriz:

function maximo(arr) {
  return Math.max.apply(null, arr);
}

Math.max.apply(null, [1, 2, 3]) é equivalente a Math.max(1, 2, 3).

Usando Math.min () em uma Matriz

Você pode usar Math.min.apply para encontrar o número mais baixo em uma matriz:

function minimo(arr) {
  return Math.min.apply(null, arr);
}

Math.min.apply(null, [1, 2, 3]) é equivalente a Math.min(1, 2, 3).

Métodos Próprios de Mínimo e Máximo

A solução mais rápida é usar um método "caseiro".

Essa função percorre uma matriz comparando cada valor com o valor mais alto encontrado.

O exemplo a seguir extrai o maior valor de uma matriz.

function maximo(arr) {
  var len = arr.length;
  var max = -Infinity;
  while (len--) {
    if (arr[len] > max) {
      max = arr[len];
    }
  }
  return max;
}

Essa função percorre um array comparando cada valor com o valor mais baixo encontrado.

O exemplo a seguir extrai o menor valor de uma matriz.

function minimo(arr) {
  var len = arr.length;
  var min = Infinity;
  while (len--) {
    if (arr[len] < min) {
      min = arr[len];
    }
  }
  return min;
}

Classificando Matrizes de Objetos

As elementos das matrizes podem ser objetos:

var carros = [
  {type:"Volvo", ano:2016},
  {type:"Saab", ano:2001},
  {type:"BMW", ano:2010}
];

Mesmo que os objetos tenham propriedades de diferentes tipos de dados, o método sort()   pode ser usado para classificar a matriz.

A solução é escrever uma função de comparação para comparar os valores da propriedade:

carros.sort(function(a, b){return a.ano - b.ano});

Comparar propriedades de string é um pouco mais complexo:

carros.sort(function(a, b){
  var x = a.type.toLowerCase();
  var y = b.type.toLowerCase();
  if (x < y) {return -1;}
  if (x > y) {return 1;}
  return 0;
});

Teste-se com Exercícios

Use o método de ordenação correto para classificar a matriz frutas em ordem alfabética decrescente.

var frutas = ["Banana", "Laranja", "Maçã", "Kiwi"];