'comparing 2 strings alphabetically for sorting purposes
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?
Solution 1:[1]
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:[2]
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 3:[3]
"a".localeCompare("b") should actually return -1 since a sorts before b
Solution 4:[4]
Let's say we have an array of objects such as:
{ name: String }
then we can sort our array as follows:
array.sort((a, b) => {
if (a.name === b.name) return 0;
return a.name > b.name ? 1 : -1;
});
Note: Be careful with uppercase letters. You may need to cast your string to lowercase depending on the purpose.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | John McCollum |
| Solution 2 | Patrick Moore |
| Solution 3 | ntalbs |
| Solution 4 | Victor Schröder |
