13

这可能是一个不寻常的请求,但对于我的脚本,我需要一个按字母而不是数字递增的函数。例如:

这是一个数字示例:

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(我认为)。

谢谢!

4

5 回答 5

38

这是一个将数字转换为字母的简单递归函数。

它是从一开始的,所以 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;
}

一个测试:http: //jsfiddle.net/St6c9/

于 2012-06-18T20:00:16.383 回答
3

你的意思是这样的吗?

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
于 2012-06-18T19:23:10.283 回答
0

创建一个由字母 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];

于 2012-06-18T19:16:34.917 回答
0

试试下面的。在几分钟内尝试和测试

 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>
于 2012-06-18T19:40:10.207 回答
0

这就是你如何生成随机字母:

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();
于 2017-10-30T20:30:39.600 回答