6

I'm having trouble sorting a specific array of objects from a small personal project I'm working on. I have never had trouble using the Array.prototype.sort() function before, but I wonder if something about the multiple object keys is affecting it...

Been staring at it for longer than I care to admit and just need to ask for help now. :|

Goal: Sort array of objects alphabetically relative to a specific key.value on each of them.

Thanks in advance!

JS Fiddle Here

Sort function example - (I recommend looking at the full Fiddle for context though).

var sorted = array.sort((a, b) => { return a.key > b.key; });

SOLVED

@Ryan helped me find that returned a boolean isn't enough, you need to explicitly return a positive or negative number, or 0.

@Brk showed me an awesome quick way to do it.

This post has a very detailed description. Sorting in JavaScript: Shouldn't returning a boolean be enough for a comparison function?

Thanks all! Sorry for the duplicate post :|

Community
  • 1
  • 1
TJBlackman
  • 1,895
  • 3
  • 20
  • 46
  • 1
    The sort comparison function should return `-1` if `a < b`, `0` if `a = b`, or `1` if `a > b`. – Ry- May 06 '17 at 03:58
  • I thought returning true / false would be good enough, it always has been before. But your comment inspired me to search again and I found this article... http://stackoverflow.com/questions/24080785/sorting-in-javascript-shouldnt-returning-a-boolean-be-enough-for-a-comparison Ok... So annoying. Thanks though! – TJBlackman May 06 '17 at 04:02
  • @Ryan Note that it isn't required to return the specific values `1` or `-1`. Any positive or negative value is treated the same. – Michael Geary May 06 '17 at 05:03

1 Answers1

7

You can use localeCompare method which will returns a number indicating whether a reference string comes before or after or is the same as the given string in sort order.

var sorted = array.sort((a, b) => {
  return a.subreddit.localeCompare(b.subreddit)
});

DEMO

brk
  • 48,835
  • 10
  • 56
  • 78