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
您面临什么问题或非最优?类似于此>>?