我试图在chart.js中显示数据,我需要按小时获取每月的平均值,例如,下午1点的平均值,整个月下午2点的平均值。我有一个对象数组的数组。每个对象数组都是每月的一天。它具有按小时排列的日期和值。因此,每个对象数组需要24小时和24个值。
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
}
}
})()
但是问题是我无法定义一个函数来计算特定小时数。有人知道吗?
答案 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);