在JavaScript中将整数转换为等同的字符

我想基于字母表将一个整数转换成等价的字符。 例如:

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

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

干杯。 🙂

假设你想要小写字母:

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

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

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

 char='abcdefghijklmnopqrstuvwxyz'[code] 

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

 char='abcdefghijklmnopqrstuvwxyz'.charAt(code); 

如果您不介意重新获取多字符string,则可以支持任意正数索引:

 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 

(没有彻底testing精度错误:)

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

 String.fromCharCode(97+n); 

如果空间是宝贵的,你可以做以下的(20个字符):

 (10+n).toString(36); 

想想你能用这些额外的字节做些什么!

这是如何工作的,你将数字转换为基数36,所以你有以下字符:

 0123456789abcdefghijklmnopqrstuvwxyz ^ ^ n n+10 

通过偏移10个字符开始在a而不是0

不完全确定客户端可以比较两种不同的示例运行速度有多快。

Javascript的String.fromCharCode(code1,code2,…,codeN)接受无限数量的参数,并返回相应的ASCII值为code1,code2,… codeN的string。 由于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 } 

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

 var a = String.fromCharCode(97); 

你去:(a-zA-Z)

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

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

要么:

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

在范围错误的情况下返回undefined。 注意:数组只会被创build一次,并且因为closures,所以可用于新的codeToChar函数。 我猜这是第一种方法更快(这只是一个查询基本上)。

它生成随机数字和字符进行电话validation或其他。

 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); 

这里是链接

假设你想要大写字母:

 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”

数字来函函数

 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,可以扭转变化,或者干脆增加值++; 在整个方法的开始。