GUJS

O Maior Fórum Javascript do Brasil

Ordenando um array numérico

Um pequeno impecílho, na hora de ordenar um vetor número em javascript, pode deixar o programador com um pouco de dor de cabeça. O método sort() do objeto Array utiliza um algoritmo de ordenação de caracteres para ordenar os itens do array, ou seja, quando você quer ordenar um array de números, ele coloca o 10 antes do 2, por exemplo. Veja como resolver isto.

[4,7,2,10,35,67,3,2].sort(function(){return arguments[0] - arguments[1];});

Note que estamos passando um parâmetro para o método sort(). Esse parâmetro é a função que vamos utilizar para determinar se qual dos dois itens é maior. Se não passarmos esse parâmetro para o sort, ele vai considerar que os itens do array são caracteres.

Você também pode criar um novo método para o objeto Array, o que lhe permite usar este novo método em qualquer array. Para isso, vamos usar o conceito de prototype do javascript. Veja como ficou nosso novo método para ordenar vetores numéricos:

Array.prototype.sortnum = function() {
  return this.sort(function(){return arguments[0] - arguments[1];});
}

Para finalizar, preparei um exemplo para vocês demonstrando os resultados da ordenação normal e da utilizando nosso novo método sortnum.

Exemplo | Download

4 Comentários para “Ordenando um array numérico”

  1. Otto Says:

    Qual a explicação para o arguments[0] - arguments[1]?
    O que isso faz?

  2. Matheus Zeuch Says:

    Oi Otto,
    “arguments” é um array nativo que toda função do Javascript tem. Ele terá todos os argumentos passados para a função.
    Abraço

  3. Otto Says:

    Tudo bem, mas você retornou a diferença entre o primeiro e o segundo argumento? Quais foram os argumentos passados na prática?

    É meio confuso para quem não está acostumado com closures.

  4. Daniel Says:

    Faltou essa informação:

    /*
    * Retornar:
    * - Um valor negativo se o primeiro argumento for menor que o segundo.
    * - Zero se os dois argumentos forem equivalentes.
    * - Um valor positivo se o primeiro argumento for maior que o segundo.
    */

Comentários

©2008 GUJS. Todos os direitos reservados.