【JavaScript】文字列内の各文字に対応する番号(a=1〜z=26)を取得する方法
本記事では、文字列を引数として受け取り、その中の各アルファベット文字に対応する番号を出力するJavaScript関数の実装方法を解説します。
まず、アルファベットと番号の対応関係は以下のとおりです。
a = 1
b = 2
c = 3
d = 4
e = 5
.
.
.
Y = 25
Z = 26
したがって、入力が「hello man」だった場合、出力は各文字に対応する番号の並びになります。
"8,5,12,12,15,13,1,14"
サンプルコード
実際のコードは以下のとおりです。
const str = 'hello man';
const charPosition = str => {
str = str.split('');
const arr = [];
const alpha = /^[A-Za-z]+$/;
for(let i = 0; i < str.length; i++){
if(str[i].match(alpha)){
const num = str[i].toLowerCase().charCodeAt(0) - 96;
arr.push(num);
}else{
continue;
}
}
return arr.toString();
}
console.log(charPosition(str));
出力結果
このコードをコンソールで実行すると、次の出力が得られます。
"8,5,12,12,15,13,1,14"
コードの仕組み
処理の流れを順番に見ていきましょう。
1. 文字列を配列に分割
split('') を使うことで、文字列を1文字ずつの要素を持つ配列に変換できます。「hello man」なら ['h', 'e', 'l', 'l', 'o', ' ', 'm', 'a', 'n'] のようになります。
2. 正規表現で英字かどうかを判定
正規表現 /^[A-Za-z]+$/ によって、対象の文字が半角英字かどうかをチェックしています。スペースや記号などの英字以外の文字は continue でスキップされるため、出力結果には含まれません。
3. 文字コードから番号を計算
charCodeAt(0) は文字のUTF-16コードユニットを返します。小文字の「a」のコードは97なので、そこから96を引くことで「a = 1」という対応関係を実現しています。また、toLowerCase() を挟むことで、大文字の「A」(コード65)が入力されても正しく1として扱えるようにしています。この変換がないと、大文字の場合に負の値になってしまう点に注意してください。
4. 結果をカンマ区切りの文字列で返す
最後に toString() を使うことで、配列内の数値をカンマ区切りの文字列としてまとめて返しています。
-
JavaScriptで文字列を特定の回数だけ繰り返す方法
JavaScriptでは、文字列と数値を引数として受け取り、その文字列を指定された回数だけ繰り返した新しい文字列を返す関数を書くことが求められるケースがあります。本記事では、その実装方法をわかりやすく解説します。問題の概要ここで必要なのは、次のような仕様を持つJavaScript関数です。第1引数に文字列、第2引数に繰り返し回数(数値)を受け取る入力文字列を第2引数で指定された回数だけ繰り返す繰り返した結果の新しい文字列を返す実装例以下は、ループ処理を使って文字列を繰り返すコード例です。const str = this; const num = 8; const repeatSpecific
-
JavaScriptで文字列の各文字を1始まりのインデックス回数だけ繰り返す方法
問題 英小文字(a〜z)のみで構成された文字列を受け取り、特定のルールに従って新しい文字列を構築するJavaScript関数を作成する必要があります。 ルールは以下のとおりです。 各文字を、その文字列内での1始まりのインデックスの回数だけ繰り返す 繰り返し後の文字列の先頭の文字を大文字にする 異なる文字のグループ同士はダッシュ「-」で区切る たとえば、文字列「abcd」の場合、出力は次のようになります。 A-Bb-Ccc-Dddd コード例 以下は、forループを使った基本的な実装例です。 const str = abcd; const repeatStrings = (str) =&