Javascript 如何有效地增加字母表中的值

Javascript 如何有效地增加字母表中的值,javascript,string,algorithm,Javascript,String,Algorithm,假设您有一个字母表,其字符顺序如下: abcdefghijklmnopABCDEFG123456789 然后,您希望将它们增加到任意长度。所以它从一个字符开始,然后是2个,然后是3个,然后。。。n a b c ... A B C ... 1 2 3 ... aa ab ... aA aB ... ba bb bc ... bA bB ... za zb ... 1a 1b ... aaa aab aac ... aba abb abc ... aAa aAb ... 所以它先增加最右边的,然

假设您有一个字母表,其字符顺序如下:

abcdefghijklmnopABCDEFG123456789
然后,您希望将它们增加到任意长度。所以它从一个字符开始,然后是2个,然后是3个,然后。。。n

a
b
c
...
A
B
C
...
1
2
3
...
aa
ab
...
aA
aB
...
ba
bb
bc
...
bA
bB
...
za
zb
...
1a
1b
...
aaa
aab
aac
...
aba
abb
abc
...
aAa
aAb
...
所以它先增加最右边的,然后是左边的,然后是左边的,等等

这有点棘手。不知道怎么做

想知道怎么做,这样它就可以使用任何字母表,并构造成任意长度,所以它是通用的

function getStringAtIndex(index, alphabetArray) {

}

或者也许可以用另一种方式来做,我不确定。

@tehhowch完全正确,而不是做十六进制(base 16),你本质上是想做base-n数学。对于指定的字符集,这将是base-33数学(如果包含0字符)

每一位小数代表n^x次方。十进制很容易。100是10^2,1000是10^3。这就是对数:对数(1000)以10=3为底,因为10^3=1000

幸运的是,我们可以通过执行log(n)/log(base)获得任何基的日志。因此具有以下功能:

function convert(number) {
    var chars = '0abcdefghijklmnopABCDEFG123456789',
        base = chars.length, i = number, str = '',
        exp = Math.floor(Math.log(i)/Math.log(base))+1;
    while(exp--) {
        var bexp = Math.pow(base, exp);
        var j = Math.floor(i/bexp);
        i -= j*bexp;
        str += chars[j];
    }
    return str;
}
convert(90014234); // "bi62Gb"
convert(791424) // "F01B"
convert(23423); // "Ep3"
convert(33); // "a0"
您可以通过使用更常见的字符集(如十六进制(以16为基数))来验证该方法,并确保数字正确无误。您需要在函数中替换
var chars='0123456789abcdef'
。然后我们指定一个十六进制数并确保输出匹配:

convert(0xdd5439af); // "dd5439af"

听起来你想用任意基数来表示一个数字。当
n
小于字母表中的字符数时,您有一个数字。当
n
小于
n*n
时,您有两个数字。等