JavaScriptで数値配列の移動平均をリアルタイムに計算する方法
問題
数値の配列を受け取り、各位置における「それまでの要素の累積平均(移動平均)」を格納した新しい配列を構築するJavaScript関数を作成する必要があります。たとえば、次のようになります。
[1, 2, 3, 4, 5] → [1, 1.5, 2, 2.5, 3]
最初の要素は最初の要素単体の平均、2番目の要素は先頭2つの要素の平均、3番目は先頭3つの要素の平均、というように順番に計算していきます。
コード例
以下が実際の実装コードです。
const arr = [1, 2, 3, 4, 5];
const movingAverage = (arr = []) => {
const res = [];
let sum = 0;
let count = 0;
for(let i = 0; i < arr.length; i++){
const el = arr[i];
sum += el;
count++;
const curr = sum / count;
res[i] = curr;
};
return res;
};
console.log(movingAverage(arr));
出力
コンソールへの出力結果は次のとおりです。
[ 1, 1.5, 2, 2.5, 3 ]
解説
このアルゴリズムでは、ループ内でこれまでの合計値(sum)と処理済みの要素数(count)を常に保持しています。各ステップで sum / count を計算するだけで現在位置までの平均が求まるため、毎回先頭から要素を足し直す必要がなく、全体をO(n)の計算量で効率的に処理できます。時系列データのスムージングやチャート表示など、リアルタイム性が求められる場面でも活用できるシンプルな手法です。
-
JavaScriptで配列の平均値を計算する方法
JavaScriptで配列の平均値を求めるには、配列内のすべての要素を合計し、その合計を配列の長さ(要素数)で割ります。要素の合計を求めるには、forEach()メソッドやreduce()メソッドを使うと簡単に実装できます。コード例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initia
-
JavaScriptで入力配列の末尾からn個の偶数を抽出して返す方法
問題数値の配列を第1引数として、数値を第2引数として受け取るJavaScript関数を作成します。この関数の役割は、入力配列の中から末尾側に近い方からn個の偶数を選び出し、それらを新しい配列として返すことです。たとえば、配列 [1, 2, 3, 4, 5, 6, 7, 8, 9] と数値 3 を渡した場合、期待される結果は [4, 6, 8] になります。実装例以下がそのコードです。const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const num = 3; const pickEvens = (arr = [], num = 1) => { c