JavaScriptで平均値を計算する際に一部の値を除外する方法
たとえば、次のようなオブジェクトの配列があったとします。
data = [
{"Age":26,"Level":8},
{"Age":37,"Level":9},
{"Age":32,"Level":5},
{"Age":31,"Level":11},
{"Age":null,"Level":15},
{"Age":null,"Level":17},
{"Age":null,"Level":45}
];このデータには Age(年齢)が null のオブジェクトが含まれています。ここで必要になるのは、Age プロパティが有効な値(truthy な値)を持つオブジェクトだけを対象として、Level の平均値を計算する JavaScript 関数です。
ポイント:truthy 判定による除外
JavaScript では、null・undefined・0・空文字などは「falsy(偽とみなされる値)」として扱われます。そのため、if 文による条件判定を組み込むだけで、これらの無効なデータを自動的に除外することができます。
コード例
以下が実際の実装コードです。
data = [
{"Age":26,"Level":8},
{"Age":37,"Level":9},
{"Age":32,"Level":5},
{"Age":31,"Level":11},
{"Age":null,"Level":15},
{"Age":null,"Level":17},
{"Age":null,"Level":45}
];
const findAverage = arr => {
const creds = arr.reduce((acc, val) => {
const { Age, Level } = val;
let { count, sum } = acc;
if(Age){
count += 1;
sum += Level;
};
return { count, sum };
}, {
count: 0,
sum: 0
});
return (creds.sum)/(creds.count);
};
console.log(findAverage(data));処理の流れを解説
このコードでは Array.prototype.reduce() メソッドを使用しています。
- 初期値として、count(対象件数)と sum(合計値)を持つオブジェクトをアキュムレータとして用意します。
- 配列の各要素を順に取り出し、Age プロパティが truthy である場合のみ、count を +1 し、sum に Level を加算します。
- すべての要素を処理した後、sum を count で割ることで、有効なデータのみの平均値が求められます。
この方法なら、filter() で前処理をしてから再度ループする二度手間を避け、一度の走査で集計を完結できるのがメリットです。
出力結果
コンソールには次のように出力されます。
8.25
Age が null の 3 件(Level: 15, 17, 45)は計算から除外され、残りの 4 件をもとに (8 + 9 + 5 + 11) ÷ 4 = 8.25 という結果が得られます。API レスポンスなどで欠損値を含むデータを扱う際に役立つ、シンプルかつ実用的なテクニックです。
-
JavaScriptで配列の平均値を計算する方法
JavaScriptで配列の平均値を求めるには、配列内のすべての要素を合計し、その合計を配列の長さ(要素数)で割ります。要素の合計を求めるには、forEach()メソッドやreduce()メソッドを使うと簡単に実装できます。コード例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initia
-
JavaScriptでfalsy値(偽と評価される値)を見分ける方法
JavaScriptにおけるfalsy値とはJavaScriptでは、値をBoolean型として評価したときに「false」とみなされる値がいくつか存在します。これらは「falsy値(偽の値)」と呼ばれます。条件分岐や論理演算において、意図しない動作を防ぐために、どの値がfalseと評価されるかを正しく理解しておくことが重要です。JavaScriptでfalseと評価される主な値は以下の通りです。false — Boolean型のfalseそのもの0 — 数値のゼロ空文字列:、、または ``(テンプレートリテラル)null — 値が存在しないことを示す特殊な値undefined — 値が未定義