如何从具有日期的对象数组的数组中获取平均值?

时间:2019-01-04 17:11:21

标签: javascript

我试图在chart.js中显示数据,我需要按小时获取每月的平均值,例如,下午1点的平均值,整个月下午2点的平均值。我有一个对象数组的数组。每个对象数组都是每月的一天。它具有按小时排列的日期和值。因此,每个对象数组需要24小时和24个值。

enter image description here

const countHours = (() => {
  const hours = []
  let total = 0
  for (let i = 0; i < arrayOfDays.length; i++) {
    const day = arrayOfDays[i]
    for (let i = 0; i < 24; i++) {
      total += day[i].y
    }
  }
})()

但是问题是我无法定义一个函数来计算特定小时数。有人知道吗?

2 个答案:

答案 0 :(得分:0)

您可以通过使用以下语句替换内部循环来做到这一点:

total += day[2].y

在循环结束时,总数将包含一个月的2AM小时总数。

要获得平均值,请将total除以该月的总天数。

这是一个完整的示例:

const countHours = (hourOfDay) => {
    let total = 0
    for (let i = 0; i < arrayOfDays.length; i++) {
       const day = arrayOfDays[i]
       total += day[hourOfDay].y
    }
    return total / arrayOfDays.length;
}

在此示例中,我假设arrayOfDays仅包含一个月的数据。

答案 1 :(得分:0)

const mapOfHours = arrayOfDays.reduce((sum, day) => {
   day.forEach(hour => {
      const hourX = hour.x.getHours();
      const hourY = hour.y;
      sum[hourX] = (sum[hourX] || 0) + hourY; 
   });
   return sum;
}, {});

console.log(mapOfHours);

我能想到的最快的实现方式

const mapOfHours = {};
for(let i=0; i < arrayOfDays.length; i++){
    const currentDay = arrayOfDays[i];
    for(let j=0; j < currentDay.length; j++){
        const hour = currentDay[j];
        const hourX = hour.x.getHours();
        const hourY = hour.y;
        mapOfHours[hourX] = (sum[hourX] || 0) + hourY; 
    }
}

console.log(mapOfHours);