将整数转换为其等效字符,其中0 => a,1 => b等

时间:2010-06-29 21:50:56

标签: javascript integer alphabet

我想根据字母表将整数转换为其等效字符。例如:

0 => a
1 => b
2 => c
3 => d

等。我可以构建一个数组,只在需要时查找它,但我想知道是否有内置函数为我做这个。我通过Google找到的所有示例都使用ASCII值,而不是字符在字母表中的位置。

14 个答案:

答案 0 :(得分:298)

假设你想要小写字母:

var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...

97是小写'a'的ASCII码。如果你想要大写字母,用97替换97(大写'A')。请注意,如果n > 25,您将超出字母范围。

答案 1 :(得分:80)

在扩展到其他字母表的情况下会更便携:

char='abcdefghijklmnopqrstuvwxyz'[code]

或者,为了更加兼容(与我们心爱的IE):

char='abcdefghijklmnopqrstuvwxyz'.charAt(code);

答案 2 :(得分:24)

如果你不介意重新获得多字符串,你可以支持任意正指数:

function idOf(i) {
    return (i >= 26 ? idOf((i / 26 >> 0) - 1) : '') +  'abcdefghijklmnopqrstuvwxyz'[i % 26 >> 0];
}

idOf(0) // a
idOf(1) // b
idOf(25) // z
idOf(26) // aa
idOf(27) // ab
idOf(701) // zz
idOf(702) // aaa
idOf(703) // aab

(未对精度错误进行全面测试:)

答案 3 :(得分:16)

一个简单的答案是(26个字符):

String.fromCharCode(97+n);

如果空间很珍贵,您可以执行以下操作(20个字符):

(10+n).toString(36);

想想你可以用所有这些额外的字节做什么!

如何将数字转换为基数36,因此您有以下字符:

0123456789abcdefghijklmnopqrstuvwxyz
^         ^
n        n+10

通过偏移10,字符从a开始,而不是0

不完全确定客户端会比较两个不同示例的速度有多快。

答案 4 :(得分:6)

Javascript的String.fromCharCode(code1,code2,...,codeN)接受无数个参数并返回一个字母字符串,其对应的ASCII值为code1,code2,... codeN。由于97是ASCII中的'a',我们可以通过向索引添加97来调整索引。

function indexToChar(i) {
  return String.fromCharCode(i+97); //97 in ASCII is 'a', so i=0 returns 'a', 
                                    // i=1 returns 'b', etc
}

答案 5 :(得分:3)

使用String.fromCharCode。这将从Unicode值返回一个字符串,该值与ASCII的前128个字符匹配。

var a = String.fromCharCode(97);

答案 6 :(得分:2)

你去:(a-zA-Z)

function codeToChar( number ) {
  if ( number >= 0 && number <= 25 ) // a-z
    number = number + 97;
  else if ( number >= 26 && number <= 51 ) // A-Z
    number = number + (65-26);
  else
    return false; // range error
  return String.fromCharCode( number );
}

输入:0-51,否则返回false(范围错误);

OR:

var codeToChar = function() {
  var abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
  return function( code ) {
    return abc[code];
  };
})();

在范围错误的情况下返回undefined。 注意:数组将只创建一次,因为关闭它将可用于新的codeToChar函数。我想它比第一种方法更快(它基本上只是一种查找)。

答案 7 :(得分:1)

@ mikemaccana的唯一问题是,它使用二进制&gt;&gt;操作员,这是昂贵的,性能方面的。我建议对他的伟大工作进行这种修改,作为一种轻微的改进,你的同事也许可以更轻松地阅读。

const getColumnName = (i) => {
     const previousLetters = (i >= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '');
     const lastLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26]; 
     return previousLetters + lastLetter;
}

或作为单行

const getColumnName = i => (i >= 26 ? getColumnName(Math.floor(i / 26) -1 ) : '') + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[i % 26];

示例:

getColumnName(0); // "A"
getColumnName(1); // "B"
getColumnName(25); // "Z"
getColumnName(26); // "AA"
getColumnName(27); // "AB"
getColumnName(80085) // "DNLF"

答案 8 :(得分:1)

我不喜欢使用path97之类的使用幻数的所有解决方案。

36

假定为大写字母,并从0开始以“ A”开头。

答案 9 :(得分:0)

尝试

(n+10).toString(36)

chr = n=>(n+10).toString(36);

for(i=0; i<26; i++) console.log(`${i} => ${ chr(i) }`);

答案 10 :(得分:0)

如果您正在寻找TypeScript工作功能,请按照

public numericValue = (alphaChar: any) => alphaChar.toUpperCase().charCodeAt(0) - 64;

public alphaValue = (numericDigit: any) => 
   String.fromCharCode(64 + numericDigit) : '';

您可以根据要求在函数体内进行多项检查,例如(numericDigit >= 1 && numericDigit <= 26) ?

答案 11 :(得分:-3)

假设你想要大写的大小写字母:

function numberToLetter(num){
        var alf={
            '0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G'
        };
        if(num.length== 1) return alf[num] || ' ';
        return num.split('').map(numberToLetter);
    }

示例:

numberToLetter('023') [“A”,“C”,“D”]

numberToLetter('5')“F”

number to letter function

答案 12 :(得分:-3)

它生成随机数和字符用于电话验证或其他内容。

function randomIntFromInterval(min,max)
{
    return Math.floor(Math.random()*(max-min+1)+min);
}




function generateRandomVerification(length){
let char;
let sum ="";
  for(let i=0;i < length;i++){
    if(Math.round(Math.random())){
      random = randomIntFromInterval(65,90);
      char = String.fromCharCode(random);//65-90
      sum = sum + char;
      console.log("CHAR: ", char);
    }else{
      random = randomIntFromInterval(48,57);
      char = String.fromCharCode(random);//48-57
      sum = sum + char;
      console.log("CHAR: ", char);
    }
  }
  alert(sum);
}

generateRandomVerification(5);

这是link

答案 13 :(得分:-8)

public static string IntToLetters(int value)
{
string result = string.Empty;
while (--value >= 0)
{
result = (char)('A' + value % 26 ) + result;
value /= 26;
}
return result;
}

为了满足A为1而不是0的要求,我添加了 - 到while循环条件,并从循环结束中删除了值 - 如果有人想让它为0为自己目的,你可以逆转变化,或者只是添加值++;在整个方法的开头。