Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将整数转换为其等效字符,其中0=>;a、 1=>;b、 等_Javascript_Integer_Alphabet - Fatal编程技术网

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

Javascript 将整数转换为其等效字符,其中0=>;a、 1=>;b、 等,javascript,integer,alphabet,Javascript,Integer,Alphabet,我想根据字母表将一个整数转换为它的等效字符。例如: 0 => a 1 => b 2 => c 3 => d 等等,我可以建立一个数组,在我需要的时候查找它,但我想知道是否有一个内置的函数来为我做这件事。我通过谷歌找到的所有例子都是使用ASCII值,而不是字符在字母表中的位置。好了:(a-zA-Z) 在范围错误的情况下返回未定义。 注意:数组将只创建一次,由于关闭,它将可用于新的codeToChar函数。我想它比第一种方法更快(基本上只是一种查找)。如果扩展到其他字母表,

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

0 => a
1 => b
2 => c
3 => d
等等,我可以建立一个数组,在我需要的时候查找它,但我想知道是否有一个内置的函数来为我做这件事。我通过谷歌找到的所有例子都是使用ASCII值,而不是字符在字母表中的位置。

好了:(a-zA-Z)

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

如果扩展到其他字母表,它将更易于移植:

char='abcdefghijklmnopqrstuvwxyz'[code]
或者,为了更兼容(与我们心爱的IE):


假设您想要小写字母:

var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...
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);
    }

97是小写字母“a”的ASCII码。如果需要大写字母,请将97替换为65(大写字母“A”)。请注意,如果
n>25
,您将超出字母范围。

Javascript的字符串。fromCharCode(code1,code2,…,codeN)接受无穷多个参数并返回一个字母字符串,其对应的ASCII值为code1,code2。。。科登。由于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值返回一个字符串,该值与ASCII的前128个字符相匹配

var a = String.fromCharCode(97);

如果您不介意取回多个字符串,则可以支持任意正索引:

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
(未彻底测试精度错误:)

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

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

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

其工作原理是将数字转换为基数36,因此具有以下字符:

String.fromCharCode(97+n);
(10+n).toString(36);
0123456789abcdefghijklmnopqrstuvwxyz
^         ^
n        n+10
通过偏移10,字符从
a
开始,而不是
0


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

假设您需要大写字母:

var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...
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);
    }
例如:

getColumnName(0); // "A"
getColumnName(1); // "B"
getColumnName(25); // "Z"
getColumnName(26); // "AA"
getColumnName(27); // "AB"
getColumnName(80085) // "DNLF"
数字字母('023')[“A”、“C”、“D”]

数字字母('5')“F”


@mikemacana伟大的解决方案唯一的问题是,它使用了二进制>>运算符,这是一种昂贵的性能优化方法。我建议对他的伟大作品进行修改,这是一个小小的改进,你的同事或许可以更容易地阅读

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"

我不喜欢所有使用幻数的解决方案,如
97
36

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

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

let characterToNumber = character => character.charCodeAt(0) - A;
这将采用大写字母,并从0开始“A”。

试试看

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

对于(i=0;i${chr(i)}`)如果您正在寻找TypeScript工作函数,请遵循

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

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

您可以进行多项检查,如
(numericDigit>=1&&numericDigit适用于ASCII,我需要处理字符在字母表中的位置。@VIVA-我想你可能已经解决了这个问题?@Galambalaza-我想你想要的是65而不是64我只是展示了它有多简单。他可能已经解决了。但是你看更新了小写字母按字母顺序排列在我看来,正如你所说,fromCharCode
扩展非常容易。当你不需要扩展时,可能更容易出错?abcedeFYI JScript(IE)不支持字符串上的索引运算符
[]
。@Crescent,
[]IE从IE8开始支持字符串上的
属性访问器(IE7兼容模式下的IE8也不起作用),为了浏览器兼容性,首选使用它而不是
[]
。例如
'foo'。charAt(0)='f'
@Crescent,忘记提到字符串上的
[]
属性访问器在ECMAScript 5上是标准化的(请参阅).好吧,学究的意思是,它需要可变数量的参数,而不是无限数量的参数。递归函数,非常好!@Mikemacana,为什么要进行这种编辑?我认为这会使阅读变得更困难。现在我必须水平滚动来阅读代码。@z0r这样使用代码的人就不必修复换行符。没有理由任意换行,编辑器w我会按照他们窗口的字符大小包装。好主意,但直到改成这样才起作用:
函数idOf(i){return(i>=26?idOf(Math.floor(i/26)-1):“”)+“ABCDEFGHIJKLMNOPQRSTUVWXYZ”[i%26];}
我很喜欢你的基本创意