JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

文字列をアルファベットの位置番号に変換するJavaScript関数の実装方法

今回は、文字列を受け取り、余分な空白を取り除き、小文字に変換した上で、各文字が英語アルファベットの中で何番目に該当するかを示す数値の配列を返す関数を作成します。文字列に含まれる空白や記号などの特殊文字は無視します。

処理の概要

たとえば 'Hello world!' という文字列を関数に渡すと、各文字がアルファベットの何番目か(a=1, b=2, … z=26)に対応する数値配列が出力されます。

Input → 'Hello world!'
Output → [8, 5, 12, 12, 15, 23, 15, 18, 12, 4]

「h」は8番目、「e」は5番目、「l」は12番目というように、各文字の位置が順番に格納され、スペースや「!」といった記号は自動的に除外されます。

サンプルコード

const str = 'Hello world!';
const mapString = (str) => {
    const mappedArray = [];
    str
    .trim()
    .toLowerCase()
    .split("")
    .forEach(char => {
        const ascii = char.charCodeAt();
        if(ascii >= 97 && ascii <= 122){
            mappedArray.push(ascii - 96);
        };
    });
    return mappedArray;
};
console.log(mapString(str));

コードの解説

  • trim():文字列の前後にある余分な空白を削除します。
  • toLowerCase():すべての文字を小文字に変換し、大文字・小文字の違いを吸収します。
  • split(""):文字列を1文字ずつに分解して配列化します。
  • charCodeAt():各文字のASCIIコードを取得します。小文字の「a」は97、「z」は122に相当します。
  • ASCIIコードが97〜122の範囲内(=英小文字)の場合のみ、96を引いてアルファベット上の位置(1〜26)を算出し、結果の配列に追加します。

実行結果

コンソールには次のように出力されます。

[
    8, 5, 12, 12, 15,
    23, 15, 18, 12, 4
]

このように、わずか十数行のコードで、任意の文字列をアルファベット順の位置情報へ簡単にマッピングできます。ASCIIコードの範囲チェックを行うことで、数字・記号・空白など英字以外の文字を自動的に除外できる点も大きなポイントです。シーザー暗号の作成や文字列解析など、さまざまな場面で応用できるテクニックなので、ぜひ覚えておきましょう。

  1. JavaScriptで文字列内の各アルファベットをn個先の文字に置き換える方法

    問題の概要アルファベットで構成された文字列と整数nを受け取り、各文字を「n個先」のアルファベットに置き換えた新しい文字列を返すJavaScript関数を作成する必要があります。この処理は、古典的な暗号化手法であるシーザー暗号(Caesar cipher)と同じ考え方に基づいています。例えば、入力が以下の場合を考えてみましょう。const str = abcd;const n = 2;この場合、期待される出力は次の通りです。const output = cdef;aは2つ先のcに、bはdにというように、文字列内のすべての文字がn個先のアルファベットへとシフトされます。実装コードconst str

  2. JavaScriptで特定の文字で始まる単語を配列から検索する方法

    JavaScriptでは、文字列の配列を第1引数として受け取り、単一の文字を第2引数として受け取る関数を作成することが求められるケースがあります。この関数は、第2引数で指定された文字で始まる、配列内の最初の要素を見つけ出し、そのインデックスを返す必要があります。該当する要素が存在しない場合は -1 を返すのが一般的です。実装例以下のコードは、forループで配列を先頭から順に走査し、各要素の先頭1文字が指定された文字と一致するかどうかを判定する、最も基本的な実装です。const names = [Naman, Kartik, Anmol, Rajat, Keshav, Harsh, Suresh