这可能是一个不寻常的请求,但对于我的脚本,我需要一个按字母而不是数字递增的函数。例如:
这是一个数字示例:
var i = 0;
while(condition){
window.write('We are at '+i);
++i;
}
本质上,我想用字母来计数,就像 Microsoft Excel 那样,而不是数字。因此,我不需要打印“我们在 0”、“我们在 1”、“我们在 2”等,而是需要打印“我们在 A”、“我们在 B”、“我们在C”等
为了模仿 Excel(我能想到的唯一例子),在达到索引 25 (Z) 后,我们可以继续使用“AA”、“AB”、“AC”等。
所以它会像这样工作得很好:
var i = 0;
while(condition){
window.write('We are at '+toLetter(i));
++i;
}
如果有人可以编写一个函数,然后将字母转换回数字,那就更好了,即 toNumber('A') = 0 或 toNumber('DC') = 107 (我认为)。
谢谢!
这是一个简单的递归函数,用于将数字转换为字母。
它是基于 1 的,所以 1 是 A,26 是 Z,27 是 AA。
function toLetters(num) {
"use strict";
var mod = num % 26,
pow = num / 26 | 0,
out = mod ? String.fromCharCode(64 + mod) : (--pow, 'Z');
return pow ? toLetters(pow) + out : out;
}
这是一个将字符串转换回数字的匹配函数:
function fromLetters(str) {
"use strict";
var out = 0, len = str.length, pos = len;
while (--pos > -1) {
out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - 1 - pos);
}
return out;
}
你的意思是这样的吗?
function num2chars(num, upper){
num2chars.letters = num2chars.letters || 'abcdefghijklmnopqrstuvwxyz'.split('');
var ret = repeat(num2chars.letters[num%26],Math.floor(num/26));
function repeat(chr,n){
if (n<1) {return chr;}
return new Array(n+1).join(chr);
}
return upper ? ret.toUpperCase() : ret;
}
//usage
while(i<104){
console.log(num2chars((i+=1),true));
}
//=> A..Z, AA..ZZ, AAA..ZZZ
创建一个由字母 A、B、C、D 等组成的数组。然后使用 array[0] 调用 A,因为 0 是 A 的索引,您可以使用 array[i] 作为索引,只需验证,这样我就不能超过25岁。
使用以下任一方式创建数组:
var alphabet = new Array("A","B","C");
var alphabet = new Array(25);
alphabet[0] = "A";
alphabet[1] = "B";
alphabet[2] = "C";
代替
toLetter(i);
使用 alphabet[i];
尝试以下操作。几分钟内就进行了尝试和测试
var prefix = Array('','A','B'); //this will extends to 3x26 letters. Determines the Max generated
//first element of prefix is `''` so you can have A B C D
var prefix = Array('','A','B');
var alphabets = Array('A','B','C','D'); //extend this to Z
var letters = Array();
function fillArray()
{
var prefix_len = prefix.length;
var array_len = prefix_len * alphabets.length;
var alpha_len = alphabets.length;
for(var i=0; i<prefix_len; i++)
{
for(var a=0; a<alpha_len; a++)
letters.push(''+prefix[i]+alphabets[a]);
}
}
function getLetter(index)
{
return letters[index];
}
function generateTestValues()
{
fillArray();
//make sure 10 is less than letters.length
for(var i=0; i<10; i++)
document.write(getLetter(i)+' '); //A B C D AA AB AC AD BA BB BC....
}
HTML
<span id="clickable" onclick="generateTestValues()">Click Me</span>
这就是生成随机字母的方法:
function getRandomArbitrary(min, max) {
max = Math.ceil(max);
min = Math.floor(min);
return Math.round(Math.random() * (max - min) + min);
}
function assignLetter(){
var group = ['A', 'B', 'C', 'D'];
var text = 'We are at ';
var str = '';
str = text + group[getRandomArbitrary(0, group.length-1)];
return str;
}
assignLetter();
对于未来的读者,我留下了我认为更直接的解决方案:
const aLetterCode = 97
const getLetterFromId = (number) => String.fromCharCode(aLetterCode + number)
console.log('code 0 ->', getLetterFromId(0)) // a
console.log('code 1 ->', getLetterFromId(1)) // b
console.log('code 12 ->', getLetterFromId(12)) // m
尝试以下操作:
function getCharCode(value) {
if (value===null || value === undefined) return "";
if (value < 26) return String.fromCharCode(65 + value);
return (
getCharCode(Number(value / 26) - 1) + String.fromCharCode(65 + (value % 26))
);
}