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

VIV*_*NWO 166 javascript integer alphabet

我想基于字母表将整数转换为其等价字符.例如:

0 => a
1 => b
2 => c
3 => d
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*uis 312

假设你想要小写字母:

var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...
Run Code Online (Sandbox Code Playgroud)

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


mbq*_*mbq 80

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

char='abcdefghijklmnopqrstuvwxyz'[code]
Run Code Online (Sandbox Code Playgroud)

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

char='abcdefghijklmnopqrstuvwxyz'.charAt(code);
Run Code Online (Sandbox Code Playgroud)

  • 当你不需要扩展时,可能更容易出错?abcede (7认同)
  • 在我看来,比起如我所说的"String.fromCharCode"更优雅,就像你说的那样,它非常容易扩展. (5认同)
  • FYI JScript(IE)不支持字符串上的索引运算符`[]`. (5认同)
  • @Crescent,IE上从IE8上支持字符串上的`[]`属性访问器(IE7中的IE8 compat模式也不起作用),[`String.prototype.chatAt`](http://bclary.com/对于浏览器兼容性,首选2004/11/07 /#a-15.5.4.4而不是`[]`.例如`'foo'.charAt(0)=='f'` (4认同)
  • @Crescent,忘了提到字符串上的`[]`属性访问器是在ECMAScript 5上标准化的(参见[\ [\ [GetOwnProperty \] \](P)](http://ecma262-5.com/ELS5_Section_15. HTM#Section_15.5.5.2)). (2认同)

z0r*_*z0r 26

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

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
Run Code Online (Sandbox Code Playgroud)

(未对精度错误进行彻底测试:)


小智 17

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

String.fromCharCode(97+n);
Run Code Online (Sandbox Code Playgroud)

如果空间很珍贵,你可以做以下(20个字符):

(10+n).toString(36);
Run Code Online (Sandbox Code Playgroud)

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

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

0123456789abcdefghijklmnopqrstuvwxyz
^         ^
n        n+10
Run Code Online (Sandbox Code Playgroud)

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

不完全确定客户端的两个不同示例的运行速度有多快.

  • 我很喜欢你的36创意 (2认同)

jun*_*var 7

我不喜欢所有使用魔术数字的解决方案,例如9736

const A = 'A'.charCodeAt(0);

let numberToCharacter = number => String.fromCharCode(A + number);

let characterToNumber = character => character.charCodeAt(0) - A;
Run Code Online (Sandbox Code Playgroud)

这假定大写字母并从 0 开始 'A'。


hun*_*att 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
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,要迂腐,它需要*变量*数量的参数,而不是*无限*数. (4认同)