JavaScriptで文字列の重みを計算する方法
アルファベット1文字の「重み」とは?
英語のアルファベットにおける「重み」とは、その文字がアルファベットの中で何番目に位置するかを示す、1から始まるインデックスのことです。
たとえば、「c」は3番目なので重みは3、「k」は11番目なので重みは11となります。
この記事では、小文字の文字列を受け取り、その文字列全体の重みを計算して返すJavaScript関数を作成します。
実装例
実際のコードは以下のとおりです。
const str = 'this is a string';
const calculateWeight = (str = '') => {
str = str.toLowerCase();
const legend = 'abcdefghijklmnopqrstuvwxyz';
let weight = 0;
const { length: l } = str;
for (let i = 0; i < l; i++) {
const el = str[i];
const curr = legend.indexOf(el);
weight += (curr + 1);
};
return weight;
};
console.log(calculateWeight(str));
出力結果
コンソールには次のように表示されます。
172
コードの解説
このコードの仕組みを順番に見ていきましょう。
1. 大文字への対応: toLowerCase() を使うことで、入力文字列に大文字が含まれていても正しく計算できるようにしています。
2. 各文字の重みの取得: 基準となる文字列 'abcdefghijklmnopqrstuvwxyz' に対して indexOf() を呼び出すことで、各文字の位置(0始まり)を取得します。そこに1を足すことで、a=1、b=2 といった1始まりの重みに変換しています。
3. アルファベット以外の文字の扱い: スペースや記号など基準文字列に存在しない文字の場合、indexOf() は -1 を返します。これに1を足すと0になるため、重みには一切加算されません。つまり、スペースは自動的に無視される仕組みになっています。
このようにシンプルなループ処理だけで、文字列の重みを効率的に計算できます。文字コードを使った別のアプローチもありますが、可読性の高さではこの方法がおすすめです。
-
【JavaScript】文字列が同一部分文字列の繰り返しで構成されているか判定する方法
問題概要文字列を1つだけ引数として受け取り、その文字列が「ある部分文字列を複数回連結したもの」になっているかどうかを判定するJavaScript関数を実装します。たとえば、関数への入力が次の場合:const str = 'thisthisthisthis';期待される出力は以下のとおりです。const output = true;出力の説明この文字列は「this」という部分文字列を4回繰り返して構成されているため、true が返されます。実装コードこの問題を解くコードは次のようになります。const str = 'thisthisthisthis';const
-
JavaScriptで不正な時間文字列(HH:MM:SS)を正規化して修正する方法
JavaScriptでは、「HH:MM:SS」形式の時間文字列を扱う場面がよくあります。しかし、時間の加算処理などで計算ミスが発生すると、分や秒が60を超えてしまう「壊れた」時間文字列が生成されることがあります。この記事では、そうした不正な時間文字列を正しく正規化する方法を解説します。 課題:壊れた時間文字列とは 今回求められるのは、JavaScriptで「HH:MM:SS」形式の時間文字列を受け取り、必要な修正を加えた上で、正しい時間文字列として返す関数を作成することです。 問題になるのは、加算処理のバグによって、次のような不正な値が含まれてしまうケースです。 MM(分)の部分が60を超え