Alphabetizing Arrays, Objects, and Arrays of Objects

0
0

An array:

let fruits = [`bananas`, `Apples`, `Oranges`];

You can sort of alphabetize that as easy as:

fruits.sort();

But notice the inconsistent casing in the array… uppercase characters will all be sorted before lowercase characters (weirdly enough) so it’ll be a little more complicated:

let fruits = [`bananas`, `Apples`, `Oranges`];
fruits.sort((a, b) => {
  return a.toLowerCase().localeCompare(b.toLowerCase());
})
console.log(fruits);

// ["Apples", "bananas", "Oranges"]

#Array of Objects

Things get trickier still if what you are trying to sort is nested within objects. Easily could be the case working with a JSON API.

let fruits = [
  {
    fruit: `Bananas`
  },
  {
    fruit: `apples`
  },
  {
    fruit: `Oranges`
  }
];

We could make a custom sorting function for this, but one slight step further is to make a more generic function that takes the key to sort by as a param.

const propComparator = (propName) =>
  (a, b) => a[propName].toLowerCase() == b[propName].toLowerCase() ? 0 : a[propName].toLowerCase() < b[propName].toLowerCase() ? -1 : 1

So now we can use it to sort:

fruits.sort(propComparator(`fruit`));
console.log(fruits);

/*
[
  {fruit: "apples"},
  {fruit: "Bananas"},
  {fruit: "Oranges"}
]
*/

#Just an Object

If we just have an object…

let fruits = {
  Bananas: true,
  apples: false,
  Oranges: true
};

We still need to downcase those keys, but we can sort an array of the keys and then make a new object from that newly sorted array of keys.

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

#Array of Objects to sort on Key

let fruits = [
  {
    Bananas: true
  },
  {
    Apples: false
  },
  {
    oranges: true
  }
];

This is probably the trickiest of them all, but there should be enough information above to sort it out. Get it.

  • You must to post comments
Showing 1 result
Your Answer

Please first to submit.