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

JavaScriptで文字列の度数分布(出現回数)を求める方法

はじめに

この記事では、JavaScriptを使って文字列に含まれる各文字の出現回数(度数分布)を計算し、その結果をオブジェクトとして返す関数の作り方を解説します。

たとえば、次のような文字列が与えられたとします。

const str = 'This string will be used to calculate frequency distribution';

この文字列から「どの文字が何回出現したか」を表すオブジェクトを作成するのが目的です。度数分布はテキスト解析やデータ分析の基礎となる処理で、頻出文字の把握などに活用できます。

実装コード

以下は、forループを使って各文字の出現回数をカウントするシンプルな実装例です。

const str = 'This string will be used to calculate frequency
distribution';

const frequencyDistribution = str => {
  const map = {};
  for (let i = 0; i < str.length; i++) {
    map[str[i]] = (map[str[i]] || 0) + 1;
  }
  return map;
};

console.log(frequencyDistribution(str));

実行結果

コンソールに出力される結果は次のとおりです。

{
  T: 1,
  h: 1,
  i: 6,
  s: 4,
  ' ': 8,
  t: 5,
  r: 3,
  n: 3,
  g: 1,
  w: 1,
  l: 4,
  b: 2,
  e: 5,
  u: 4,
  d: 2,
  o: 2,
  c: 3,
  a: 2,
  f: 1,
  q: 1,
  y: 1
}

コードの仕組み

この実装のポイントは、次の1行です。

map[str[i]] = (map[str[i]] || 0) + 1;
  • map[str[i]] || 0:その文字がまだオブジェクトに存在しない場合、undefined が返されるため、|| 0 によって初期値として 0 を設定します。
  • + 1:既存のカウントに 1 を加算することで、出現するたびに回数を更新していきます。

このように、空のオブジェクトに対して文字をキーとして出現回数を記録していくことで、一度のループで度数分布を完成させることができます。計算量は文字列の長さを n とすると O(n) となり、非常に効率的です。

大文字・小文字を区別しない場合

デフォルトでは大文字と小文字は別の文字として扱われます(例:T と t)。区別せずにカウントしたい場合は、文字列をあらかじめ小文字に変換しておくとよいでしょう。

const result = frequencyDistribution(str.toLowerCase());

まとめ

JavaScriptでは、空のオブジェクトを用意して各文字をキーに出現回数を加算していくだけで、簡単に度数分布を作成できます。論理和演算子(||)を使った初期化のテクニックは、集計処理全般で応用できるので、ぜひ覚えておきましょう。

  1. JavaScript DOMとは?基本の仕組みと要素の取得方法をわかりやすく解説

    JavaScriptのDOM(Document Object Model:ドキュメントオブジェクトモデル)は、Webページ上のHTML要素を表現する仕組みです。DOMはインターフェースとして機能し、ページのコンテンツやスタイルを変更することで、Webページを自由に操作できるようにします。 DOMにアクセスするには、Webページ上で右クリックして「検証(Inspect)」を選択します。すると画面の右側または左側にパネルが表示され、現在閲覧しているページのHTML要素を確認できます。要素にマウスカーソルを合わせると、ページ上の該当部分がハイライトされるため、どの要素がページのどのセクションに対応

  2. JavaScriptでキューに要素を追加する(エンキュー)方法

    キューへの要素追加(エンキュー)とは キューに要素を追加すること(エンキュー)とは、コンテナ配列の末尾に新しい要素を加える操作です。本記事では、配列の末尾をキューの「尾部(tail)」として扱い、すべての挿入操作をこの末尾に対して行います。つまり、先入れ先出し(FIFO)の構造において、新しく入ってくる要素は常に列の最後尾へ並ぶことになります。 この考え方に基づけば、enqueue 関数は次のようにシンプルに実装できます。 実装例:enqueue関数 enqueue(element) { // キューが満杯かどうかをチェック if (this.isFull()) {