189

整数をアルファベットに基づいた同等の文字に変換したいと思います。例えば:

0 => a
1 => b
2 => c
3 => d

など。配列を作成して、必要なときに検索することもできますが、これを行うための組み込み関数があるかどうか疑問に思っています。Googleで見つけたすべての例は、アルファベットでの文字の位置ではなく、ASCII値を使用しています。

4

12 に答える 12

346

小文字が必要だとすると:

var chr = String.fromCharCode(97 + n); // where n is 0, 1, 2 ...

97は小文字の「a」のASCIIコードです。大文字が必要な場合は、97を65(大文字の「A」)に置き換えます。n > 25の場合、文字の範囲から外れることに注意してください。

于 2010-06-29T21:54:27.390 に答える
88

他のアルファベットに拡張する場合、より移植性が高くなります。

char='abcdefghijklmnopqrstuvwxyz'[code]

または、(私たちの最愛のIEと)より互換性を持たせるために:

char='abcdefghijklmnopqrstuvwxyz'.charAt(code);
于 2010-06-29T21:54:00.983 に答える
20

簡単な答えは(26文字)です:

String.fromCharCode(97+n);

スペースが貴重な場合は、次のことができます (20 文字):

(10+n).toString(36);

これらすべての余分なバイトで何ができるか考えてみてください!

これがどのように機能するかは、数値を基数 36 に変換するため、次の文字が得られます。

0123456789abcdefghijklmnopqrstuvwxyz
^         ^
n        n+10

10 ずつオフセットすることにより、文字はaではなく で始まり0ます。

ただし、クライアント側で 2 つの異なる例を実行した場合の速度については、完全にはわかりません。

于 2016-05-20T16:19:23.167 に答える
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
}
于 2010-06-29T21:55:28.750 に答える
3

そこに行きます:(a-zA-Z)

function codeToChar( number ) {
  if ( number >= 0 && number <= 25 ) // a-z
    number = number + 97;
  else if ( number >= 26 && number <= 51 ) // A-Z
    number = number + (65-26);
  else
    return false; // range error
  return String.fromCharCode( number );
}

入力:0-51、またはfalse(範囲エラー)を返します。

また:

var codeToChar = function() {
  var abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
  return function( code ) {
    return abc[code];
  };
})();

範囲エラーの場合はundefinedを返します。注:配列は1回だけ作成され、閉じているため、新しいcodeToChar関数で使用できます。最初の方法よりもさらに高速だと思います(基本的には単なるルックアップです)。

于 2010-06-29T21:53:43.820 に答える
3

を使用しString.fromCharCodeます。これは、ASCII の最初の 128 文字に一致する Unicode 値から文字列を返します。

var a = String.fromCharCode(97);
于 2010-06-29T21:58:00.987 に答える
1

@mikemaccana の優れたソリューションの唯一の問題は、コストがかかり、パフォーマンスが高い二項 >> 演算子を使用していることです。彼の素晴らしい作品にこの変更を加えることで、同僚がおそらくより簡単に読めるようになることをお勧めします。

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"
于 2018-01-10T21:08:32.720 に答える