To compare strings alphabetically, use localeCompare()
. This returns a negative value if the reference string is lexicographically (alphabetically) before the compared string (the parameter), a positive value if it comes afterwards, and a value of 0
if they are equal.
var a = "hello";
var b = "world";
console.log(a.localeCompare(b)); // -1
The >
and <
operators can also be used to compare strings lexicographically, but they cannot return a value of zero (this can be tested with the ==
equality operator). As a result, a form of the localeCompare()
function can be written like so:
function strcmp(a, b) {
if(a === b) {
return 0;
}
if (a > b) {
return 1;
}
return -1;
}
console.log(strcmp("hello", "world")); // -1
console.log(strcmp("hello", "hello")); // 0
console.log(strcmp("world", "hello")); // 1
This is especially useful when using a sorting function that compares based on the sign of the return value (such as sort
).
var arr = ["bananas", "cranberries", "apples"];
arr.sort(function(a, b) {
return a.localeCompare(b);
});
console.log(arr); // [ "apples", "bananas", "cranberries" ]