A tarefa de hoje é ordenar um Array de objetos através de uma determinada propriedade dos objetos. A solução parece simples, mas veremos aqui que ela pode ser muito mais simples do que você imagina.
Vamos utilizar no nosso exemplo um array de objetos pessoa, que possuem as propriedades nome e idade.
Ex.:
var aPessoas = [{Nome: "João", Idade: 21},
{Nome: "Maria", Idade: 18},
{Nome: "José", Idade: 19},
{Nome: "Carlos", Idade: 13},
{Nome: "Felipe", Idade: 24},
{Nome: "Vanessa", Idade: 32},
{Nome: "Ataulfo", Idade: 26},
{Nome: "Arthur", Idade: 30},
{Nome: "Astolfo", Idade: 27},
{Nome: "Josefina", Idade: 29}];
Para começar você deve saber que existe um método sort no objeto Array do JavaScript e que o método aceita como parâmetro opcional uma função que definirá como o array deverá ser ordenado, caso você não passe este parâmetro a função sort irá ordenar os elementos alfabeticamente e ascendentemente, neste caso ao tentar ordenar números o 10 virá antes do 2.
Para ordernar números corretamente você deve definir uma função conforme segue abaixo:
var meuArray = [40, 5, 8, 90, 110, 223, 22, 3, 8];
function OrdenaNumeros(a,b) {
return a - b;
}
meuArray.sort(OrdenaNumeros);
Em posse destas informações fica fácil ordenar o nosso array de pessoas, basta utilizar a instrução abaixo:
aPessoas.sort(function(a, b) {
return a.Idade - b.Idade;
});
Para ordenar descendentemente os objetos do array existem duas maneiras a primeira é inverter a ordem dos fatores como segue abaixo:
aPessoas.sort(function(a, b) {
return b.Idade - a.Idade;
});
A segunda é para o caso dos elementos já estarem ordenados ascendentemente, assim para inverter a ordem basta utilizar o método reverse:
aPessoas.reverse();
Os métodos sort e reverse são padrões definidos na especificação ECMAScript3 e funcionam nos principais browsers do mercado.