Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Dúvida sobre função de ordenação de um array em ordem crescente.

O desafio pedia para criar uma lista com 3 elementos numéricos e colocá-los em ordem crescente. Meu código ficou assim:

function ordemCrescente(a, b, c) {
    let arrayNumbers = [];
    if(Number(a)<Number(b) && Number(a)<Number(c)){ 
        arrayNumbers.push(a);
    }else if(Number(b)<Number(a) && Number(b)<Number(c)){  
        arrayNumbers.push(b);
    }else{
        arrayNumbers.push(c)
    }

    if((Number(a)<Number(b) || arrayNumbers.includes(b)) && (Number(a)<Number(c) || arrayNumbers.includes(c)) && !(arrayNumbers.includes(a))){ 
        arrayNumbers.push(a);
    }else if((Number(b)<Number(a) || arrayNumbers.includes(a)) && (Number(b)<Number(c) || arrayNumbers.includes(c)) && !(arrayNumbers.includes(b))){
        arrayNumbers.push(b);
    }else{
        arrayNumbers.push(c)
    }

    if(!(arrayNumbers.includes(a))){
        arrayNumbers.push(a);
    }else if(!(arrayNumbers.includes(b))){
        arrayNumeros.push(b);
    }else{
        arrayNumbers.push(c);
    }
    console.log(arrayNumbers);
}

ordemCrescente(1, 10, 2);

Porém, apesar de o código funcionar perfeitamente, ele ficou muito extenso. Na opinião do professor, após o desafio, ele sugere o seguinte código:

===================== CODIGO FORNECIDO PELO PROFESSOR =======================================
function ordenarNumeros(a, b, c) {
    const numerosOrdenados = [a, b, c].sort((x, y) => x - y);
    console.log(`Números ordenados: ${numerosOrdenados.join(', ')}`);
}

// Exemplo de uso:
ordenarNumeros(3, 1, 5); // Deve exibir "Números ordenados: 1, 3, 5" 

O código ficou bem melhor, mas não entendi como funciona o método sort. Busquei na documentação do site developer mozilla, mas ainda não entendi. Caso alguém possa me ajudar a entender, fico muito grato. Desculpem se a pergunta parecer meio boba. Sou novo na área. Obrigado.

1 resposta
solução!

Oi, Elcidio! Tudo bem?

O método sort é usado para ordenar os elementos de um array, o que acontece, por padrão, por meio da ordenação em ordem alfabética dos elementos como strings, devido a isso, quando lidamos com números precisamos fornecer uma função de comparação para que a ordenação seja feita corretamente.

No código fornecido pelo professor, a função de comparação (x, y) => x - y é usada dentro do método sort, que funciona da seguinte forma:

  1. Função de comparação: (x, y) => x - y

    • Essa função recebe dois parâmetros, x e y, que representam dois elementos do array.
    • A função retorna a diferença entre x e y.
  2. Como a função de comparação funciona:

    • Se a diferença (x - y) for negativa, significa que x deve vir antes de y na ordem.
    • Se a diferença for positiva, significa que y deve vir antes de x.
    • Se a diferença for zero, a ordem dos elementos não é alterada.

De acordo com o exemplo prático:

const numeros = [3, 1, 5];
const numerosOrdenados = numeros.sort((x, y) => x - y);
console.log(numerosOrdenados); // Saída: [1, 3, 5]

O que está acontecendo é:

  • O método sort começa comparando os elementos do array.
  • Primeiro, ele compara 3 e 1. Como 3 - 1 é 2 (positivo), 1 deve vir antes de 3.
  • Em seguida, ele compara 3 e 5. Como 3 - 5 é -2 (negativo), 3 deve vir antes de 5.
  • Por fim, ele compara 1 e 5, e como 1 - 5 é -4 (negativo), 1 deve vir antes de 5.

Assim, o array [3, 1, 5] é ordenado para [1, 3, 5].

Espero ter ajudado! Caso tenha restado alguma dúvida em relação a qualquer conteúdo do curso ou atividade, não hesite em perguntar. Estou disponível e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!