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

JavaScriptで文字列内の母音と子音の出現回数を数える方法

問題の概要

本記事では、英字を含む文字列を受け取り、その中に含まれる「母音」と「子音」の出現回数をオブジェクトとして返すJavaScript関数の作り方を解説します。

例として、次のような文字列が入力されたケースを考えてみましょう。

const str = 'This is a sample string, will be used to collect some data';

この文字列に対して関数を実行すると、期待される出力は以下の通りです。

{ vowels: 17, consonants: 29 }

実装コード例

以下が実際の実装コードです。

const str = 'This is a sample string, will be used to collect some data';
const countAlpha = str => {
  return str.split('').reduce((acc, val) => {
    const legend = 'aeiou';
    let { vowels, consonants } = acc;
    if(val.toLowerCase() === val.toUpperCase()){
      return acc;
    };
    if(legend.includes(val.toLowerCase())){
      vowels++;
    }else{
      consonants++;
    };
    return { vowels, consonants };
  }, {
    vowels: 0,
    consonants: 0
  });
};
console.log(countAlpha(str));

コードの仕組み

このコードは、大きく分けて次のステップで動作しています。

  • 文字列の分割: split('') を使って文字列を1文字ずつの配列に分解します。
  • reduceによる集計: reduce() メソッドで各文字を順番に処理しながら、初期値 { vowels: 0, consonants: 0 } へとカウントを積み上げていきます。

各文字の判定ロジックは以下の通りです。

  • アルファベット以外の文字(空白・数字・記号など): toLowerCase()toUpperCase() の結果が同一になる文字は、アルファベットではないと判断され、カウントから除外されます。
  • 母音(a, e, i, o, u): 変数 legend に含まれる文字は vowels を +1 します。
  • 上記以外の文字(子音): consonants を +1 します。

判定時にはすべての文字を toLowerCase() で小文字に統一しているため、「This」の「T」のように大文字が混在する文字列でも、大文字・小文字を問わず正確にカウントできるのがポイントです。

出力結果

コンソールには以下のように出力されます。

{ vowels: 17, consonants: 29 }

このように、split()reduce() を組み合わせることで、シンプルかつ可読性の高い形で母音・子音のカウント処理を実装できます。

  1. JavaScriptで隣接する同一単語のペアを数える方法

    問題概要英文の文章を表す文字列 str を引数として受け取るJavaScript関数を作成します。この関数の目的は、文字列の中で隣り合って登場する同じ単語のペアがいくつあるかを数え、その個数を返すことです。比較の際には大文字と小文字を区別しないため、it と It は同一の単語としてカウントされます。入力例const str = This this is a a sample string;出力例const output = 2;出力の説明文中の This this と a a の2箇所で同じ単語が連続して現れているため、結果は 2 となります。実装コード以下が実際のコード例です。const

  2. JavaScriptで一致する部分文字列(部分列)の数を効率的に数える方法

    問題JavaScriptで、第1引数に文字列 str、第2引数に文字列の配列 arr を受け取る関数を作成します。この関数は、配列内の各要素 arr[i] のうち、文字列 str の「部分列」となっているものの個数を数えて返す必要があります。ここでの「部分列」とは、元の文字列から0個以上の文字を削除して得られる文字列であり、必ずしも連続している必要はない点に注意してください。これは「部分文字列」とは異なる概念です。例として、次のような入力が与えられた場合を考えてみましょう。入力const str = klmnop; const arr = [k, ll, klp, klo];出力const o