comparing 2 strings alphabetically for sorting purposes

JavascriptJquery

Javascript Problem Overview


I'm trying to compare 2 strings alphabetically for sorting purposes. For example I want to have a boolean check like if('aaaa' < 'ab'). I tried it, but it's not giving me correct results, so I guess that's not the right syntax. How do I do this in jquery or Javascript?

Javascript Solutions


Solution 1 - Javascript

You do say that the comparison is for sorting purposes. Then I suggest localeCompare instead:

"a".localeCompare("b");

It returns -1 since "a" < "b", 1 or 0 otherwise, like you need for Array.prototype.sort()

Keep in mind that sorting is locale dependent. E.g. in German, ä is a variant of a, so "ä".localeCompare("b", "de-DE") returns -1. In Swedish, ä is one of the last letters in the alphabet, so "ä".localeCompare("b", "se-SE") returns 1.

Without the second parameter to localeCompare, the browser's locale is used. Which in my experience is never what I want, because then it'll sort differently than the server, which has a fixed locale for all users.

Also, if what you are sorting contains numbers, you may want:

"a5b".localeCompare("a21b", undefined, { numeric: true })

This returns -1, recognizing that 5 as a number is less than 21. Without { numeric: true } it returns 1, since "2" sorts before "5". In many real-world applications, users expect "a5b" to come before "a21b".

Solution 2 - Javascript

Lets look at some test cases - try running the following expressions in your JS console:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

All return true.

JavaScript compares strings character by character and "a" comes before "b" in the alphabet - hence less than.

In your case it works like so -

>1 . "a​aaa" < "​a​b"

compares the first two "a" characters - all equal, lets move to the next character.

>2 . "a​a​​aa" < "a​b​​"

compares the second characters "a" against "b" - whoop! "a" comes before "b". Returns true.

Solution 3 - Javascript

Just remember that string comparison like "x" > "X" is case-sensitive

"aa" < "ab" //true
"aa" < "Ab" //false

You can use .toLowerCase() to compare without case sensitivity.

Solution 4 - Javascript

"a".localeCompare("b") should actually return -1 since a sorts before b

http://www.w3schools.com/jsref/jsref_localecompare.asp

Solution 5 - Javascript

Lets say that we have an array of objects:

{ name : String }

then we can sort our array as follows:

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

Note: Be careful for upper letters, you may need to cast your string to lower case due to your purpose.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsameoldView Question on Stackoverflow
Solution 1 - JavascriptPeter V. MørchView Answer on Stackoverflow
Solution 2 - JavascriptLixView Answer on Stackoverflow
Solution 3 - JavascriptSieluView Answer on Stackoverflow
Solution 4 - JavascriptShalom FrissView Answer on Stackoverflow
Solution 5 - JavascriptEray XxView Answer on Stackoverflow