Javascript 从数字中返回唯一且已排序的字符串

Javascript 从数字中返回唯一且已排序的字符串,javascript,string,numbers,bijection,Javascript,String,Numbers,Bijection,我有一个以10为基数的输入:1,2,3,52,53… 我想将数字转换成一个由字母a到z构成的字符串。对于每个数字,应该只有一个字母组合,并且它们应该按字母顺序排序 0 => A 1 => B 2 => C 26 => AA 27 => AB 52 => BA 53 => BB ... 目前,我构建了以下代码段: var possibleIndexes = "abcdefghijklmnopqrstuvwxyz".split(""); var resul

我有一个以10为基数的输入:
1,2,3,52,53…

我想将数字转换成一个由字母
a
z
构成的字符串。对于每个数字,应该只有一个字母组合,并且它们应该按字母顺序排序

0 => A
1 => B
2 => C
26 => AA
27 => AB
52 => BA
53 => BB
...
目前,我构建了以下代码段:

var possibleIndexes = "abcdefghijklmnopqrstuvwxyz".split("");
var result = '';
var index10 = 52;
var index26 = (index10).toString(26);

for (var i = 0; i < index26.length ; i++) {
    result += possibleIndexes[(parseInt(index26[i], 26)) % 26];
}

console.log(result);
var-possibleIndexes=“abcdefghijklmnopqrstuvxyz”.split(“”);
var结果=“”;
var index10=52;
var index26=(index10).toString(26);
对于(变量i=0;i
这离正确答案不远,但仍然是错误的


函数的正确形式是什么?

我概括了解决方案,并提供了一些测试数据:

function f(xx) {
    var v = "abcdefghijklmnopqrstuvwxyz".split("");
    var result = '';
    var nr = Math.floor(xx/26);
    var mod = xx%26;

    for ( var j = 1, jj = 1 ; j <= nr ; j=Math.pow(26,jj)+1, jj++ ) {
        result += v[(nr-1)%26];
    }

    result += v[mod];

    return result;
}

/* USEFUL FOR TESTS */
var arr = [0, 1, 25, 26, 52, 53, 701, 702, 17601, 17602, 457001, 457002];
var expected = ['a','b','z','aa', 'ba', 'bb', 'zz', 'aaa', 'zzz', 'aaaa', 'zzzz', 'aaaaa'];
for ( var k = 0 ; k < arr.length ; k++ ) {
    console.log(arr[k] + " --> " + f(arr[k]) + "-->" + expected[k]);
}
详细信息

mod
保留输出字符串的最新字符

j
呈指数增长(
26^0
26^1
26^2
…),并确保结果具有适当的字符数:

26^1+1 - 26^2   -> add one letter
26^2+1 - 26^3   -> add another letter
...

jj
仅用作指数(
1-26^1
2-26^2
3-26^3
,…)

如果26=>Z和52=>AA,27到51映射到什么?哎呀:)我编辑我的问题!为什么
26=>AA
?它不应该是
26=>Z
?你确定你真的明白你想要什么吗?这是怎么回事?又错了,很抱歉…这基本上是以26为基数,除了数字是A-Z而不是0-9A-P。
26^1+1 - 26^2   -> add one letter
26^2+1 - 26^3   -> add another letter
...