JavaScriptで文字列内の「子音」と「母音・その他の文字」の数の差を求める方法
本記事では、特定の文字列を引数として受け取り、その文字列に含まれる「子音の数」と「母音およびその他の文字の合計数」の差を返すJavaScript関数の作成方法を解説します。
例えば、次のような文字列が与えられた場合を考えてみましょう。
"HEllo World!!"
この文字列には、子音が7個、母音が3個、その他の文字(スペースや記号)が3個含まれています。したがって、出力は次のように計算されます。
|7 − (3+3)| = 1
つまり、この場合の出力は 1 となります。それでは、この関数のコードを実際に書いてみましょう。
コード例
const str = 'HEllo World!!';
const findDifference = str => {
const creds = str.split("").reduce((acc, val) => {
let { v, c } = acc;
const vowels = 'aeiou';
const ascii = val.toLowerCase().charCodeAt();
if(!vowels.includes(val.toLowerCase()) && ascii >= 97 && ascii <=122){
++c;
}else{
++v
};
return {c,v};
}, {
v: 0,
c: 0
});
return Math.abs(creds.c - creds.v);
}
console.log(findDifference(str))
出力結果
コンソールには次のように出力されます。
1
コードの仕組み
ここで使用しているコードのロジックを簡単に整理してみます。
- split(""):文字列を1文字ずつ要素に持つ配列へ分解します。
- reduce():各文字を順番に走査し、初期値
{ v: 0, c: 0 }をもとにカウントを集計していきます。 - 各文字は一度小文字に変換され、'aeiou' に含まれるかどうかで母音かどうかを判定します。
- 母音ではなく、ASCIIコードが 97〜122(英字の範囲)に該当する場合は子音として
cをインクリメントします。 - それ以外(スペースや記号など)はその他の文字として
vに加算されます。つまりvは「母音+その他の文字」の合計数を表します。 - 最後に Math.abs() を使って、子音の数と(母音+その他の文字)の数の差の絶対値を返しています。
このように、reduce を活用することで、ループ処理を簡潔に記述しながら文字種別のカウントを効率的に行えます。文字列解析の練習問題としても非常に良い題材なので、ぜひ自分のコードでも応用してみてください。
-
JavaScriptとPHPの違いとは?主要な相違点を比較表でわかりやすく解説
はじめにJavaScriptとPHPは、Web開発の世界で最も人気のあるプログラミング言語の2つです。どちらも豊富な機能と特徴を備えており、世界中の開発者から広く利用されています。この記事では、両言語の主な違いを比較表とあわせて、初心者にもわかりやすく解説します。JavaScriptとPHPの主な違い(比較表)項番比較項目JavaScriptPHP1登場時期1995年にブレンダン・アイク(Brendan Eich)によって開発されました。1994年にラスマス・ラードフ(Rasmus Lerdorf)によって開発されており、JavaScriptより先に登場しています。2種類(実行環境)主にクライ
-
JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説
JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod