Publicação

Alfabetizando Arrays, objetos e arrays de objetos

foto de
Gabriel Goulart

    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
}
*/

Comentários