Sobes.tech
Junior

Como classificaria um array de números?

sobes.tech IA

Resposta da IA

// Usamos o método sort() com uma função de comparação
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // Ordenação crescente

// Para ordenar por ordem decrescente:
// numbers.sort((a, b) => b - a);

O método sort() em JavaScript ordena os elementos do array no local. Por padrão, converte os elementos em strings e ordena lexicograficamente. Para ordenar números corretamente, é necessário passar uma função de comparação ao sort().

A função de comparação aceita dois argumentos, a e b.

  • Se a função retornar um número negativo, a virá antes de b.
  • Se retornar um número positivo, b virá antes de a.
  • Se retornar 0, a ordem dos elementos não muda.

Para ordenar números em ordem crescente, usa-se (a, b) => a - b. Se a for menor que b, o resultado é negativo, e a vem antes de b. Para ordenar em ordem decrescente, usa-se (a, b) => b - a. Se b for menor que a, o resultado é positivo, e b vem antes de a.

Outros métodos (menos frequentes para arrays numéricos simples, mas úteis):

  • Método localeCompare() para strings com números:

    // Não recomendado para números puros, mas pode ser usado
    // se os números estiverem representados como strings e for necessário considerar a localidade.
    const stringNumbers = ["10", "2", "1"];
    stringNumbers.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
    // Ordena como [ "1", "2", "10" ]
    
  • Criar uma cópia do array antes de ordenar:

    // Se desejar manter o array original
    const originalNumbers = [4, 2, 5, 1, 3];
    const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
    // ou
    // const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);