How to get the next letter of the alphabet in Javascript?
Solution 1
my_string.substring(0, my_string.length - 1)
+ String.fromCharCode(my_string.charCodeAt(my_string.length - 1) + 1)
Solution 2
// This will return A for Z and a for z.
function nextLetter(s){
return s.replace(/([a-zA-Z])[^a-zA-Z]*$/, function(a){
var c= a.charCodeAt(0);
switch(c){
case 90: return 'A';
case 122: return 'a';
default: return String.fromCharCode(++c);
}
});
}
Solution 3
A more comprehensive solution, which gets the next letter according to how MS Excel numbers it's columns... A B C ... Y Z AA AB ... AZ BA ... ZZ AAA
This works with small letters, but you can easily extend it for caps too.
getNextKey = function(key) {
if (key === 'Z' || key === 'z') {
return String.fromCharCode(key.charCodeAt() - 25) + String.fromCharCode(key.charCodeAt() - 25); // AA or aa
} else {
var lastChar = key.slice(-1);
var sub = key.slice(0, -1);
if (lastChar === 'Z' || lastChar === 'z') {
// If a string of length > 1 ends in Z/z,
// increment the string (excluding the last Z/z) recursively,
// and append A/a (depending on casing) to it
return getNextKey(sub) + String.fromCharCode(lastChar.charCodeAt() - 25);
} else {
// (take till last char) append with (increment last char)
return sub + String.fromCharCode(lastChar.charCodeAt() + 1);
}
}
return key;
};
Solution 4
Here is a function that does the same thing (except for upper case only, but that's easy to change) but uses slice
only once and is iterative rather than recursive. In a quick benchmark, it's about 4 times faster (which is only relevant if you make really heavy use of it!).
function nextString(str) {
if (! str)
return 'A' // return 'A' if str is empty or null
let tail = ''
let i = str.length -1
let char = str[i]
// find the index of the first character from the right that is not a 'Z'
while (char === 'Z' && i > 0) {
i--
char = str[i]
tail = 'A' + tail // tail contains a string of 'A'
}
if (char === 'Z') // the string was made only of 'Z'
return 'AA' + tail
// increment the character that was not a 'Z'
return str.slice(0, i) + String.fromCharCode(char.charCodeAt(0) + 1) + tail
}
Solution 5
Just to explain the main part of the code that Bipul Yadav wrote (can't comment yet due to lack of reps). Without considering the loop, and just taking the char "a" as an example:
"a".charCodeAt(0) = 97...hence "a".charCodeAt(0) + 1 = 98 and String.fromCharCode(98) = "b"...so the following function for any letter will return the next letter in the alphabet:
function nextLetterInAlphabet(letter) {
if (letter == "z") {
return "a";
} else if (letter == "Z") {
return "A";
} else {
return String.fromCharCode(letter.charCodeAt(0) + 1);
}
}
Dominic Barnes
Updated on April 30, 2021Comments
-
Dominic Barnes about 3 years
I am build an autocomplete that searches off of a CouchDB View.
I need to be able to take the final character of the input string, and replace the last character with the next letter of the english alphabet. (No need for i18n here)
For Example:
- Input String = "b"
- startkey = "b"
- endkey = "c"
OR
- Input String = "foo"
- startkey = "foo"
- endkey = "fop"
(in case you're wondering, I'm making sure to include the option
inclusive_end=false
so that this extra character doesn't taint my resultset)
The Question
- Is there a function natively in Javascript that can just get the next letter of the alphabet?
- Or will I just need to suck it up and do my own fancy function with a base string like "abc...xyz" and
indexOf()
?
-
Gabriele Petrioli about 14 yearsbut watch for the edge case of z/Z
z +1 = {
andZ +1 = [
-
Dominic Barnes about 14 years@ictoofay Thanks, this worked right away. @Gaby Thanks for the heads up!
-
kumarharsh almost 9 yearsNote, you can alternatively use
key.substr(-1)
in theelse{}
part to get the last character, but it doesn't work in IE's JScript, which doesn't accept negative indices forsubstr()
. I'm not sure about the support in the new Edge browser though... -
kumarharsh over 8 yearsI've found that IE11 and Edge both do support negative indices in
substr()
... Seems like IE10 also does (tested by changing the browser mode in IE11) -
Wyck over 7 yearsThis doesn't return keys in the order that you promised. You promised
A B C ... Y Z AA AB ... AZ BA ... ZZ AAA
But it actually returnsA B .. Y Z ZA ZB .. ZY ZZ ZZA ZZB .. ZZY ZZZ ZZZA ZZZB ...
-
kumarharsh over 7 years@Wyck - thanks for pointing this out, The script was wrong. I've fixed the script. Although I think your comment was a bit wrong: the function was outputting
AA AB ... AZ A[
but it was outputtingZZA....ZZZ AAAA
correctly (atleast from my testing) -
Bojidar Stanchev over 4 yearsTo be honest I was expecting something alongside the speed of 'a'++, not a whole regex
-
TylerH over 4 yearsPlease add some explanation as to why this answer is useful and how it works. Code-only answers are of low value, especially in the long term. Assume readers don't know as much as you do and so won't be able to understand your code.