JavaScriptで文字列をアルファベット順の数字に変換・マッピングする方法
問題の概要
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"
コードの解説
ここでは、処理の流れを順番に見ていきましょう。
- split(''):文字列を1文字ずつに分解して配列にします。'hello man' の場合は ['h','e','l','l','o',' ','m','a','n'] になります。
- 正規表現 /^[A-Za-z]+$/:対象の1文字が英字かどうかを判定し、スペースや記号を自動的にスキップします。
- toLowerCase():大文字が混在しても正しく計算できるよう、小文字に統一してから処理します(元のコードのままでは大文字 'A'〜'Z' に対して負の値が返ってしまうため、この点を改善しています)。
- charCodeAt(0) - 96:小文字 'a' の文字コードは97なので、「97 - 96 = 1」となり、各文字のアルファベット上の位置を取得できます。
- toString():結果の数値配列を「8,5,12,...」のようなカンマ区切りの文字列に変換して返します。
-
JavaScriptで不正な時間文字列(HH:MM:SS)を正規化して修正する方法
JavaScriptでは、「HH:MM:SS」形式の時間文字列を扱う場面がよくあります。しかし、時間の加算処理などで計算ミスが発生すると、分や秒が60を超えてしまう「壊れた」時間文字列が生成されることがあります。この記事では、そうした不正な時間文字列を正しく正規化する方法を解説します。 課題:壊れた時間文字列とは 今回求められるのは、JavaScriptで「HH:MM:SS」形式の時間文字列を受け取り、必要な修正を加えた上で、正しい時間文字列として返す関数を作成することです。 問題になるのは、加算処理のバグによって、次のような不正な値が含まれてしまうケースです。 MM(分)の部分が60を超え
-
JavaScriptで文字列から数字だけを抽出する方法
問題アルファベット・特殊文字・数字が混在した文字列 str を受け取り、その中に含まれる数字だけを元の順序のまま抽出して、新しい文字列として返すJavaScript関数を作成します。例えば、関数への入力が次の場合:const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;期待される出力は次のとおりです。const output = 1234567;解決コード以下がその実装例です。const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;const pickNumbers = (str = ) => { le