JavaScriptで2つの文字列のASCIIスコアを比較して差を求める方法
ASCIIコードとは
ASCII(アスキー)は7ビットの文字コード体系で、各ビットの組み合わせが一意の文字を表します。
英字アルファベットの一つひとつには、固有の10進数ASCIIコードが割り当てられています。
ここでは、2つの文字列を受け取り、それぞれの「ASCIIスコア」(文字列内の各文字のASCIIコード10進数値の合計)を計算し、その差を返す関数を作成していきます。
実装例
それでは、実際のコードを見てみましょう。
const str1 = 'This is the first string.';
const str2 = 'This here is the second string.';
// 文字列のASCIIスコア(各文字のコード値の合計)を計算する
const calculateScore = (str = '') => {
return str.split("").reduce((acc, val) => {
return acc + val.charCodeAt(0);
}, 0);
};
// 2つの文字列のASCIIスコアの差を返す
const compareASCII = (str1, str2) => {
const firstScore = calculateScore(str1);
const secondScore = calculateScore(str2);
return Math.abs(firstScore - secondScore);
};
console.log(compareASCII(str1, str2));コードの解説
この処理は大きく分けて2つのステップで構成されています。
1. calculateScore関数:文字列を split("") で1文字ずつ配列に分解し、reduce() を使って各文字の charCodeAt(0)(先頭文字のASCIIコード値)を順番に加算していきます。初期値を0とすることで、空文字列に対しても安全に0を返せます。
2. compareASCII関数:両方の文字列のASCIIスコアを取得し、Math.abs() によって差の絶対値を返します。これにより、どちらの文字列のスコアが大きいかを気にせずに比較結果を得られます。
出力結果
コンソールには以下のように出力されます。
536
この結果から、2つの文字列のASCIIスコアには536の差があることがわかります。文字数が多いほど、また大きなコード値を持つ文字(小文字や記号など)が含まれるほど、スコアは大きくなる傾向があります。
-
JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方
JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時
-
JavaScriptのテンプレート文字列(テンプレートリテラル)とは?基本の使い方を解説
テンプレート文字列(テンプレートリテラル)とは テンプレート文字列は、ES6(ECMAScript 2015)で導入された機能で、文字列の中に式を直接埋め込むことを可能にしました。従来のシングルクォート()やダブルクォート()の代わりに、バッククォート(``)を使用する点が特徴です。 テンプレート文字列を使うと、文字列の連結や補間(インターポレーション)がはるかに直感的に行えます。例えば ${a + b} のように記述することで、文字列の中に任意の式をそのまま埋め込めます。従来のように + 演算子で文字列をつなぎ合わせる方法と比べると、はるかに読みやすく美しい構文です。 JavaScriptに