Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหาค่าเฉลี่ยเคลื่อนที่ของอาร์เรย์ตัวเลขใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ ฟังก์ชันควรสร้างอาร์เรย์ใหม่ที่เก็บค่าเฉลี่ยเคลื่อนที่ (moving average) ของสมาชิกอาร์เรย์เข้า

เช่น:

[1, 2, 3, 4, 5] → [1, 1.5, 2, 2.5, 3]

สมาชิกแรกคือค่าเฉลี่ยของตัวแรก สมาชิกที่สองคือค่าเฉลี่ยของ 2 ตัวแรก สมาชิกที่สามคือค่าเฉลี่ยของ 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 ]

คำอธิบายเพิ่มเติม

Cumulative moving average (CMA) คำนวณได้แบบ incremental: CMAₙ = CMAₙ₋₁ + (xₙ - CMAₙ₋₁)/n โค้ดตัวอย่างใช้ sum และ count สะสม ซึ่งเข้าใจง่ายและแม่นยำ