2:00am, Writing code

Roughly coding. Posted from Berlin.

Javascriptでアルファベット配列をスマートに定義する

プログラミングコンテスト(プロコン)やオンラインのプログラミング学習サイトなどの問題を解く時、アルファベット配列が必要になる場合がある(気がする)。

JavascriptにはRubyPythonなどのように範囲指定子がないので自力で定義してやる必要があるが、どうせならできるだけスマートに実装したいところである。

方法1

const a = ['a', 'b', ..., 'y', 'z'];

最も素朴な方法。まぁスマートではない。

方法2

const c = 'a'.charCodeAt(0);
const alphabets = Array.apply(null, new Array(26)).map((v, i) => {
  return String.fromCharCode(c + i);
});

Programmaticallyにアルファベット配列を生成してみる。ここでのポイントはArray.applyで配列を生成していることである。こうすることでundefinedで初期化された配列が生成され、その後のmap処理が適切に実行される。単にnew Array(26).mapとすると空の配列が生成されるためmapが実行されないという問題が発生する。

方法3(おまけ)

function makeAlphabetsBetween(start, end) {
  const s = start.charCodeAt(0);
  const e = end.charCodeAt(0);
  const num = (e - s) + 1;
  return Array.apply(null, new Array(num)).map((v, i) => {
    return String.fromCharCode(s + i);
  });
}
const a = makeAlphabetsBetween('g', 'n');
console.log(a); // ['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']

任意の開始文字と終了文字を指定してその間に出現する文字の配列を生成するサンプル。エラーケースは考慮してないので必要に応じて各自で実装してください。

参考

javascript - Create an array of characters from specified range - Stack Overflow

javascript - How to generate an array of alphabet in jQuery? - Stack Overflow