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

[Dúvida] Não entendi o retorno da função de comparação

Olá.

Não entendi a "magia" em que o retorno da função de comparação define o sort ascendente ou descendente por meio da subtração dos dois parâmetros.

No vídeo, foi utilizada essa função para um sort ascendente:

precos.sort( (a, b) => a - b )

E para o sort descendente:

precos.sort( (a, b) => b - a )

O instrutor meio que deixou implícito que é assim que funciona, mas não explicou o motivo. Achei que ficou muito vago...

2 respostas
solução!

Olá! Tudo bem? A função sort pode ser customizada usando funções e arrow functions, mas no geral o seu funcionamento é o seguinte:

  • é feita uma subtração entre dois números a e b:
  • se o resultado for positivo então a é considerado maior e então colocado numa posição mais para o final do array
  • se o resultado for negativo então temos o oposto, b é maior que a então b que é colocado mais para o final
  • o outro caso possível é quando o resultado é zero, significando que eles são iguais e então sua posição é mantida.

Isso é válido para quando temos a - b na função sort, porém quando colocamos b - a acontece o inverso, a subtração entre b - a vai retornar um valor positivo quando b for maior que a, porém como o resultado foi positivo o a será colocado numa posição mais a direita do array, mesmo sendo menor que b ele acaba sendo considerado maior pelo algoritmo, desse jeito nós invertemos a ordem crescente e obtemos a ordem decrescente. Outra questão válida é que a e b são nomes genéricos, mas que podem ser substituídos por outros, como numero1 e numero2 e entre outros.


Veja alguns exemplos:

let array = [0, 1];

// Caso crescente
array.sort((num1, num2) => num1 - num2);
// (num1 = 0, num2 = 1) => 0 - 1 = negativo, então num2 é considerado maior e colocado a direita
console.log(array); // [ 0, 1 ]

// Caso decrescente
array.sort((num1, num2) => num2 - num1);
// (num1 = 0, num2 = 1) => 1 - 0 = positivo
// então num1 é considerado maior e colocado a direita mesmo que 0 seja menor que 1
console.log(array); // [ 1, 0 ]

Espero ter ajudado!

Entendi! Então é o resultado da subtração (positivo, negativo, zero) que é levado em conta para decidir a ordem dos parâmetros.

Obrigado pela sua explicação, foi excelente! Senti que nesse curso não foi bem explicado tanto o sort() quanto o reduce(), em questão de como usar os parâmetros e o que está sendo de fato feito por trás dos panos.

Obrigado e bons estudos!