Ordenando Array de Objects usando sort() 📊
Se você já precisou ordenar um Array de Objects, com certeza já ouviu falar do método sort()
. Mas você sabia que é possível personalizar a ordenação de acordo com as suas necessidades?
O método sort()
aceita como parâmetro opcional uma função de comparação, que define o critério de ordenação dos elementos do Array. Essa função recebe dois parâmetros, que representam dois elementos do Array a serem comparados, e deve retornar um número negativo se o primeiro elemento é menor que o segundo, um número positivo se o segundo é menor que o primeiro, e zero se ambos são iguais.
Por exemplo, imagine que você tem um Array de Objects que representa uma lista de alunos, e cada Object tem duas propriedades: "nome" e "nota". Para ordenar essa lista por ordem alfabética de nome, você pode usar o método sort()
com a seguinte função de comparação:
listaAlunos.sort((alunoA, alunoB) => { if (alunoA.nome < alunoB.nome) { return -1; } else if (alunoA.nome > alunoB.nome) { return 1; } else { return 0; }});
Nesse exemplo, a função de comparação verifica se o nome do alunoA
é menor que o nome do alunoB
. Se for, retorna -1
. Se for maior, retorna 1
. Se forem iguais, retorna 0
. Com essa função, o método sort()
ordena a lista de alunos por ordem alfabética de nome.
Mas e se você quisesse ordenar a lista por ordem decrescente de nota? Basta mudar a função de comparação:
listaAlunos.sort((alunoA, alunoB) => alunoB.nota - alunoA.nota);
Nesse caso, a função de comparação subtrai a nota do alunoB pela nota do alunoA, o que resulta em um número positivo se a nota do alunoB for maior que a do alunoA, e um número negativo se for menor. Com essa função, o método sort()
ordena a lista de alunos por ordem decrescente de nota.
Vale lembrar que o método sort()
modifica o Array original, e não cria uma cópia ordenada. Se você quiser manter o Array original intacto, é necessário criar uma cópia antes de ordená-lo.
E aí, gostou de aprender mais sobre o método sort()
? Já usou ele para ordenar Arrays de Objects? Se tiver alguma dúvida, é só perguntar lá na minha caixinha de perguntas do instagram, que estou lá para ajudar.