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

Ordenação de listas com o sort e função comparadora

Olá, fiquei meio confuso quanto a como o Javascript executa o código que foi passado como conteúdo adicional, acredito que tenha sido essa a dúvida do aluno neste tópico https://cursos.alura.com.br/forum/topico-sobre-o-link-como-ordenar-uma-sequencia-de-numeros-no-javascript-206424 mas ele não soube se expressar que queria entender como o js executa esse código.

3 respostas

Pensando sobre o assunto, acho que entendi como o Javascript executa o código, por favor me corrija se eu estiver errado.

Ao declarar a função comparaNumeros como parametro da função sort, ela faz mais ou menos isso?

var lista = [10,1,5,9,8,12,15];

function comparaNumeros(a, b){
    if(a == b) return 0;
    if(a < b) return -1;
    if(a > b) return 1;
}

lista.sort(comparaNumeros);

/* Basicamente a sort está dando de 2 em 2 números para a função comparaNumeros que está sendo passada como parametro e fazendo o seguinte
10 = a e 1 = b e executando os if, no caso 1 é menor que 10 então retorna -1 e fica 1, 10
depois ele compara o próximo grupo que seria o 10 e o 5, o 10 sendo maior que 5 toma o lugar dele e assim por diante até percorrer toda a lista.
*/
solução!

Olá, Rodolfo! Tudo certo?

Muito bem, você está no caminho correto! Uma forma de você entender o comportamento do sort() é pensar que o sort() fará a classificação dos elementos com base no que for retornado da função comparaNumeros(a, b) da seguinte forma:

  • Se comparaNumeros(a, b) for menor que zero, o método sort() entenderá que a deve possuir um índice menor que b. Portanto, o a virá antes de b.
  • Se comparaNumeros(a, b) for maior que zero, o método sort() entenderá que b deve possuir um índice menor que a. Portanto, o b virá antes de a.
  • Se comparaNumeros(a, b) retornar zero, o método sort() não irá alterar as posições.

Assim, se quisermos que nossa lista seja ordenada de forma crescente (do menor para o maior) usando a função comparaNumeros(a, b), pensamos da seguinte forma:

"Para dois valores (a e b) eu quero que o menor entre eles venha primeiro (ordem crescente), ou seja, tenha índice menor que zero". Isso em código pode ser escrito como:

    if(a < b) return -1; //se a for menor que b, o return -1 no sort colocará o b antes do a

Ficou mais claro? Caso tenha ficado com alguma dúvida, não deixe de compartilhar!

Continue praticando e evoluindo na sua jornada.

Bons estudos e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Obrigado, Emerson!

Explicadíssimo!

Abs