JavaScriptで配列の配列から各サブ配列の平均値を求める方法
本記事では、数値が格納された配列の配列(ネストされた配列)を受け取り、それぞれのサブ配列の平均値を要素として持つ新しい配列を返す関数 getAverage() を作成する方法を解説します。
たとえば [[1, 2, 3], [4, 5, 6]] のような入力に対しては、各サブ配列の平均である [2, 5] を返すという仕組みです。
実装の考え方
実装には Array.prototype.map() と Array.prototype.reduce() を組み合わせます。まず元の配列に対して map を実行して各サブ配列を順に処理し、その内部で reduce を使って要素の合計を求めます。ここでは、各要素をあらかじめ配列の長さ(length)で割りながら加算していくことで、平均値を直接計算しています。
サンプルコード
const arr = [[1,54,65,432,7,43,43, 54], [2,3], [4,5,6,7]];
const secondArr = [[545,65,5,7], [0,0,0,0], []];
const getAverage = (arr) => {
const averageArray = arr.map(sub => {
const { length } = sub;
return sub.reduce((acc, val) => acc + (val/length), 0);
});
return averageArray;
}
console.log(getAverage(arr));
console.log(getAverage(secondArr));
実行結果
コンソールへの出力は以下のようになります。
[ 87.375, 2.5, 5.5 ]
[ 155.5, 0, 0 ]
コードのポイント
- map(): 元の配列の各サブ配列に対して同じ処理を適用し、その結果を新しい配列として返します。
- reduce(): 各サブ配列の要素を先頭から順に加算していきます。初期値として
0を指定しているため、安全に計算を開始できます。 - 空配列への対応: サブ配列が空の場合(length が 0)、反復処理する要素がないため
reduceは初期値の0をそのまま返します。そのため平均値は 0 となり、エラーが発生することはありません。
このように map と reduce を組み合わせることで、ネストされた配列の集計処理を簡潔かつ宣言的に記述できます。小数点以下の扱いが必要な場合は、必要に応じて toFixed() や四捨五入処理を追加するとよいでしょう。
-
JavaScriptで配列の平均値を計算する方法
JavaScriptで配列の平均値を求めるには、配列内のすべての要素を合計し、その合計を配列の長さ(要素数)で割ります。要素の合計を求めるには、forEach()メソッドやreduce()メソッドを使うと簡単に実装できます。コード例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initia
-
複数の値でJavaScript配列の要素を検索する方法
JavaScriptである配列(arr)が、別の配列(arr1)の複数の値・すべての要素を含んでいるかどうかを確認したい場面はよくあります。そんなときは、every()メソッドとincludes()メソッドを組み合わせることで、シンプルに判定できます。以下はそのサンプルコードです。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content=