JavaScriptで平均値と最頻値が一致するかどうかを判定する方法
本記事では、ソート済みの数値配列を受け取り、そのデータセットから平均値(平均)と最頻値(モード)を計算し、両者が一致する場合に true、そうでない場合に false を返すJavaScript関数の実装方法を解説します。
問題の概要
要件は以下のとおりです。
- 引数としてソート済みの数値配列を受け取る
- 配列内の数値から平均値を求める
- 配列内の数値から最頻値を求める
- 平均値と最頻値が等しければ
trueを、等しくなければfalseを返す
具体例
たとえば、入力配列が次のような場合を考えてみましょう。
const arr = [5, 3, 3, 3, 1];
この配列の場合、平均値は (5 + 3 + 3 + 3 + 1) ÷ 5 = 15 ÷ 5 = 3 となり、最も出現回数が多い値である最頻値も 3 です。したがって、この配列に対する関数の出力は true になります。
実装コード
以下が実際のコードです。
const arr = [5, 3, 3, 3, 1];
// 平均値を計算する関数
const mean = arr => arr.reduce((a, b) => a + b) / arr.length;
// 最頻値を計算する関数
const mode = arr => {
let obj = {}, max = 1, mode;
for (let i of arr) {
obj[i] = obj[i] || 0;
obj[i]++
}
for (let i in obj) {
if (obj.hasOwnProperty(i)) {
if (obj[i] > max) {
max = obj[i]
mode = i;
}
}
}
return +mode;
}
// 平均値と最頻値が一致するかを判定
const meanMode = arr => mean(arr) === mode(arr)
console.log(meanMode(arr));コードの解説
1. 平均値(mean)の計算
reduce() メソッドを使って配列内のすべての要素を合計し、それを配列の長さ(arr.length)で割ることで平均値を算出しています。
2. 最頻値(mode)の計算
まずオブジェクト obj を用意して、各値の出現回数をカウントします。その後、カウント結果を走査し、最大の出現回数を持つ値を最頻値として取得します。戻り値では単項プラス演算子(+mode)により文字列を数値へ変換している点に注意してください。
3. 判定処理(meanMode)
meanMode 関数は、平均値と最頻値を厳密等価演算子(===)で比較し、その結果を真偽値として返します。
実行結果
コンソールに出力される結果は以下のとおりです。
true
このように、[5, 3, 3, 3, 1] のような配列では平均値と最頻値がどちらも 3 で一致するため、関数は true を返します。なお、参考までにこの配列をソートすると [1, 3, 3, 3, 5] となり、中央値も同じく 3 になるため、平均・中央・最頻の3つすべてが一致する例となっています。
-
JavaScriptのPromiseとは?非同期処理の基本をわかりやすく解説
JavaScriptのPromiseとは?Promise(プロミス)は、JavaScriptで非同期処理を扱うためのオブジェクトです。Promiseが生成された時点では、最終的な結果の値はまだ確定していません。処理が完了した将来のタイミングで、成功または失敗の結果を受け取ることができます。これにより、APIからのデータ取得やファイル読み込みなど、時間のかかる処理を効率的に記述できます。Promiseの3つの状態Promiseは、必ず以下の3つの状態のいずれかを持ちます。pending(待機):初期状態。処理がまだ完了していない状態です。fulfilled(履行):処理が正常に完了し、結果の値が
-
JavaScriptで絶対差が指定した数以下となる最長の部分配列を求める方法
問題の概要数値の配列(第1引数:arr)と数値(第2引数:num)を受け取るJavaScript関数を作成します。この関数は、配列内の任意の2つの要素間の絶対差がnum以下となる最長の部分配列(連続・非連続を問わない)の長さを求めて返す必要があります。入力例と出力例例えば、入力配列と数値が以下の通りだったとします。const arr = [7, 9, 8, 6, 6, 3];const num = 1;この場合、期待される出力は次のようになります。const output = 3;これは、条件を満たす最長の部分配列が [7, 6, 6] であるためです。この部分配列内の要素同士の絶対差は、すべ