JavaScriptでオブジェクトの配列から特定プロパティの平均値を計算する方法
はじめに
JavaScriptでは、オブジェクトが格納された配列から特定のプロパティの値を集計したいケースはよくあります。本記事では、各オブジェクトが持つ「age(年齢)」プロパティを例に、reduce()メソッドを使って平均値を計算する方法を解説します。
サンプルデータ
まず、次のようなオブジェクトの配列を用意します。各オブジェクトには name と age の2つのプロパティが含まれています。
const people = [
{ name: 'Anna', age: 22 },
{ name: 'Tom', age: 34 },
{ name: 'John', age: 12 },
{ name: 'Kallis', age: 22 },
{ name: 'Josh', age: 19 }
];この配列を受け取り、すべての年齢の平均値を返す関数を作成します。
実装コード
const findAverageAge = (arr) => {
const { length } = arr;
return arr.reduce((acc, val) => {
return acc + (val.age / length);
}, 0);
};
console.log(findAverageAge(people)); // => 21.8コードの解説
この関数のポイントは以下のとおりです。
- 分割代入で要素数を取得:
const { length } = arr;により、配列の要素数を変数として取り出しています。 - reduce()で累積計算: 初期値
0を起点に、各オブジェクトのageを要素数で割った値を順番に加算していきます。最終的に合計÷要素数、つまり平均値になります。 - 初期値の指定が重要:
reduce()の第2引数に0を渡すことで、空の配列が渡されてもエラーにならず0を返す安全な実装になります。
実行結果
コンソールには以下の出力が表示されます。
21.8
別の書き方:合計を先に求める方法
より直感的なアプローチとして、まず年齢の合計を求めてから割り算する方法もあります。
const findAverageAge = (arr) => {
const total = arr.reduce((sum, val) => sum + val.age, 0);
return arr.length ? total / arr.length : 0;
};
console.log(findAverageAge(people)); // => 21.8こちらの書き方は、小数点の誤差の影響を受けにくく、処理の意図も分かりやすいのが特徴です。arr.length が0の場合のゼロ除算チェックも加えているため、より堅牢な実装となっています。
まとめ
オブジェクト配列から特定プロパティの平均値を計算するには、reduce()メソッドが最適です。「各値を要素数で割りながら累積する」方法でも、「合計を先に求めてから割る」方法でも結果は同じですが、可読性と精度を考慮すると後者のアプローチをおすすめします。データ分析やAPIレスポンスの集計など、実務でも頻繁に使われるテクニックなので、ぜひマスターしておきましょう。
-
JavaScriptでIDごとにオブジェクトの配列をグループ化する方法
JavaScriptでオブジェクトの配列をidなどの特定のキーごとにグループ化したい場合、reduce()メソッドを使うと簡潔に実装できます。この記事では、どのプロパティにも対応できる汎用的なgroupBy関数を作成し、実際のサンプルコードとともにその仕組みを詳しく解説します。 reduce()によるグループ化の考え方 reduce()は、配列の各要素を順番に処理しながら、1つの累積値(ここではオブジェクト)を組み立てていくメソッドです。各要素からキーの値を取り出し、その値がまだ結果オブジェクトに存在しなければ新しい配列を作成して、そこへ要素を追加していくことでグループ化を実現します。 サ
-
JavaScriptで指定した個数の要素による配列の重複順列をすべて生成する方法
はじめに リテラル値の配列を第1引数として、数値を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、第2引数で指定された個数と同じ長さを持ち、入力配列の要素から作り得るすべての順列(重複あり)を格納した配列を返すものです。 要件の整理 例えば、入力配列と数値が以下のような場合を考えてみましょう。 const arr = [k, 5]; const num = 3; この場合、期待される出力は次のようになります。各要素は長さ3の配列で、「k」と「5」の組み合わせがすべて網羅されています。 const output = [ &n