Javascript 实施编号方案,如A、B、C和x2026;AA、AB和#x2026;AAA&x2026;,类似于将数字转换为radix26

Javascript 实施编号方案,如A、B、C和x2026;AA、AB和#x2026;AAA&x2026;,类似于将数字转换为radix26,javascript,algorithm,character-encoding,type-conversion,Javascript,Algorithm,Character Encoding,Type Conversion,可能重复: 在JavaScript中,我想在JavaScript中实现一个编号方案,以便1是a,2是B。。。。26是Z,27是AA,28是AB 为此,代码如下: function convertor(n){ var x = n-1, baseCharCode = "A".charCodeAt(0); var arr = x.toString(26).split(''), len = arr.length; return a

可能重复:

在JavaScript中,我想在JavaScript中实现一个编号方案,以便1是a,2是B。。。。26是Z,27是AA,28是AB

为此,代码如下:

function convertor(n){

     var x = n-1,
         baseCharCode = "A".charCodeAt(0);

     var arr = x.toString(26).split(''),
         len = arr.length;

     return arr.map(function(val,i){
         val = parseInt(val,26);

         if( (i === 0) && ( len > 1)){
              val = val-1;
         }

         return String.fromCharCode(baseCharCode + val);
     }).join('');
}
它似乎工作得很好,但有没有优化它的想法或实现它的其他方法?

这个系统类似于(从A=0开始),被称为双射base-26(它没有0)。可以使用标准的基本转换算法进行转换,如下所示:

function toDecimal(str) {
    var decimal = 0;
    var letters = str.split(new RegExp());

    for(var i = letters.length - 1; i >= 0; i--) {
        decimal += (letters[i].charCodeAt(0) - 64) * (Math.pow(26, letters.length - (i + 1)));
    }

    return decimal;
}
从本质上讲,您可以按如下所示从六面体转换为基数10。假设您必须字符串“AB”。那么你得到的是:

1 0 (positions)
---
A B
+ +
| |
| +----> 2 * (26 ^ 0) +
+------> 1 * (26 ^ 1)
       = 28
这给了你28分

另一个例子:

2 1 0 (positions)
A B C
+ + +
| | |
| | +----> 3 * (26 ^ 0) +
| +------> 2 * (26 ^ 1) +
+--------> 1 * (26 ^ 2)
           = 731

您面临什么问题或非最优?类似于此>>?