我想创建一个应该返回序列中第 n 个字符串的函数
a、b、c、...、z、aa、ab、...、az、ba、...、zz、aaa、...
对于给定的数字 n(索引从零开始)。
这是我当前的功能:
const charCode = 'a'.charCodeAt(0);
function identName(a){
var b = '';
while(a){
b = String.fromCharCode(charCode + a % 26) + b;
a = a / 26 | 0;
}
return b || 'a';
}
有 26 个字母,因此我除以 26,每次将余数(模 26)的字符代码连接到字符串 b
。然而,这是输出:
abc def g h i j k l m no p q r s t u v w x y z ba bb bc bd ...
如您所见,两个字母的字符串从ba
开始。我试图在每次迭代中减少1,但结果是这样的:
a a b c def g hi j k l m no p q r s t u v w x y a' aa ab ac ad ...
有两次字符串a
并且没有z
。我究竟做错了什么?如何以最佳且快速的方式正确生成该序列?
编辑
我真的不明白我的问题中有什么不清楚的地方。我只是想要一个像这样调用 identName(0)
并返回 "a"
的函数,当像这样 identName(1)
调用时返回"b"
等...,当这样调用时:identName(26)
返回 "aa"
等等。怎么能描述得更简单呢。我真的不明白这里有什么不清楚的地方......:/
最佳答案
这应该可以解决问题。
const charCode = 'a'.charCodeAt(0);
var identName = function (a) {
var b = [a], sp, out, i, div;
sp = 0;
while(sp < b.length) {
if (b[sp] > 25) {
div = Math.floor(b[sp] / 26);
b[sp + 1] = div - 1;
b[sp] %= 26;
}
sp += 1;
}
out = "";
for (i = 0; i < b.length; i += 1) {
out = String.fromCharCode(charCode + b[i]) + out;
}
return out;
}
本质上,每次进行转换时,您都会跳过 0 个位置,例如 27 -> 0,0 而不是 1,0。
关于JavaScript - 字母序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790901/