Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Método sort();

Olá, sou iniciante em lógica de programação e queria uma explicação sobre o método sort();, por exemplo, para exibir números em ordem crescente.

Estou tentando fazer uma leitura num vetor de 6 posições e imprimir seus valores (que são gerados a partir do método Math.round(Math.random() * 60)) em ordem crescente, mas estou tendo dificuldade, pois não entendi muito bem qual é a lógica...

Se puderem me ajudar a entender o funcionamento do sort(); e alguns exemplos pra fixar o aprendizado, fico grato.

Obrigado, e bons estudos à todos.

3 respostas

Oi Osmair, fiz aqui um código que faz exatamente o que você esta descrevendo no post. Dá uma olhada e vê se fica mais claro pra você entender:

var vetor = [];
for(var contador = 0; contador < 6; contador++){
    var valorGerado = Math.round(Math.random() * 60);
    vetor.push(valorGerado)
}

//nesse momento, nossa variável vetor terá 6 valores randomicos gerados

console.log("Antes de ordenar: " + vetor);

console.log("Depois de ordenar: " + vetor.sort());

A saída desse algoritmo é:

Antes de ordenar: 41,35,10,16,47,52
Depois de ordenar: 10,16,35,41,47,52

Espero que tenha ficado claro! Qualquer coisa não deixe de perguntar!

solução!

Olá Osmair! O método sort () classifica os itens de um vetor. A ordem de classificação pode ser alfabética ou numérica, e ascendente (para cima) ou descendente (para baixo). Por padrão, o método sort () classifica os valores como Strings em ordem alfabética e ascendente. Exemplo:

var frutas = ["Uva", "Manga", "Banana", "Laranja" ];
frutas.sort();

O resultado é:

Banana, Laranja, Manga, Uva

Isso funciona bem para strings ( "Banana" vem antes de "Uva"). No entanto, os números também são classificados como strings, "25" é maior que "100", porque "2" é maior que "1". Exemplo:

var numeros = [100, 25, 3, 2016];
numeros.sort();

O resultado é:

100, 2016, 25, 3

Devido a isso, o método sort () produzirá um resultado incorreto ao classificar números. Você pode corrigir isso, fornecendo uma "função de comparação".

Funciona assim. A função define uma ordem de classificação. A função deve retornar um valor negativo, zero ou positivo, dependendo dos argumentos. Quando o método 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).

Exemplo: Ao comparar 40 e 100, o método sort () chama a função de comparação (40,100). A função calcula 40-100 e retorna -60 (um valor negativo). A função de classificação classificará 40 como um valor inferior a 100.

Na prática com o mesmo código anterior fica assim (repara que o retorno é a - b):

  var numeros = [100, 25, 3, 2016];
  numeros.sort(function(a, b){return a-b});

E o resultado é:

3, 25, 100, 2016

Se quiser o sentido inverso (repare que o retorno agora é b - a):

  var numeros = [100, 25, 3, 2016];
  numeros.sort(function(a, b){return b-a});

E o resultado será:

2016, 100, 25, 3

Sentido inverso com Strings:

var frutas = ["Uva", "Manga", "Banana", "Laranja" ];
frutas.sort();
frutas.reverse();

O resultado será:

Uva, Manga, Laranja, Banana

Sucesso nos estudos!

Galera, boa noite...

Excelente, muito obrigado pelas respostas e dicas. Está claro agora, e deu certo. Mais uma vez obrigado.

Abraços.