Temos um array:
let fruits = [`bananas`, `Apples`, `Oranges`];
Podemos ordená-lo utilizando a função .sort()
fruits.sort();
Porém reparem na inconsistência que acontece no array... caracteres em maiúsculo sempre são ordenados antes dos caracteres minúsculos. Então para ordenarmos corretamente teremos de usar o seguinte código:
let fruits = [`bananas`, `Apples`, `Oranges`];
fruits.sort((a, b) => {
return a.toLowerCase().localeCompare(b.toLowerCase());
})
console.log(fruits);
// ["Apples", "bananas", "Oranges"]
# ARRAY DE OBJETOS:
As coisas ficam mais complicadas se o que estamos tentando ordenar está cheio de objetos. Um caso seria quando estamos trabalhando com JSON:
let fruits = [
{
fruit: `Bananas`
},
{
fruit: `apples`
},
{
fruit: `Oranges`
}
];
Poderiamos criar uma função para isso, mas um passo mais adiante seria criar uma função mais genérica que ordena recebendo a chave a ser ordenada como parâmetro:
const propComparator = (propName) =>
(a, b) => a[propName].toLowerCase() == b[propName].toLowerCase() ? 0 : a[propName].toLowerCase() < b[propName].toLowerCase() ? -1 : 1
#APENAS UM OBJETO
Se tivermos apenas um objeto:
let fruits = {
Bananas: true,
apples: false,
Oranges: true
};
Ainda precisaremos colocar em minúsculo essas chaves, porém podemos organizar um array com as chaves e depois criar um novo objeto a partir desse array recém ordenado de chaves.
let sortedFruits = {};
Object.keys(fruits).sort((a, b) => {
return a.toLowerCase().localeCompare(b.toLowerCase());
}).forEach(function(key) {
sortedFruits[key] = fruits[key];
});
console.log(sortedFruits);
/*
{
apples: false,
Bananas: true,
Oranges: true
}
*/
Texto retirado e traduzido de: Alphabetizing Arrays, Objects, and Arrays of Objects