13

これはおそらく珍しいリクエストですが、私のスクリプトでは、数字ではなく文字でインクリメントする関数が必要です。例えば:

これは数値の例です。

var i = 0;
while(condition){
 window.write('We are at '+i);
 ++i;
}

基本的に、Microsoft Excelのように、数字ではなく文字で数えたいと思います。したがって、「We are at 0」、「We are at 1」、「We are at 2」などを印刷する代わりに、「We are at A」、「We are at B」、「Weareat」を印刷する必要があります。 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 ベースなので、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

次のことを試してください。数分で試してテストしました

 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 に答える