如何合并值数组与日期数组并对重复日期的值求平均
计算每日平均值的实现思路与代码
核心思路是先通过reduce统计每个日期对应的值总和以及数据条数,再用总和除以条数得到平均值,最后转换成你需要的格式即可。
步骤1:统计日期对应的总和与数据量
遍历数组,用对象记录每个日期的总值和数据个数:
const values = [100,100,95,80,100,100,87,88,90,40]; const dates = ['03 Dec', '03 Dec', '04 Dec', '04 Dec', '04 Dec', '04 Dec', '05 Dec', '05 Dec', '06 Dec', '06 Dec']; const stats = dates.reduce((acc, date, index) => { const val = values[index]; // 如果当前日期还没被记录,初始化sum和count if (!acc[date]) { acc[date] = { sum: 0, count: 0 }; } acc[date].sum += val; acc[date].count += 1; return acc; }, {});
步骤2:转换成目标格式
格式一:分离的日期数组与平均值数组
const resultDates = Object.keys(stats); const resultValues = resultDates.map(date => stats[date].sum / stats[date].count); // 输出结果 console.log(resultDates); // ['03 Dec', '04 Dec', '05 Dec', '06 Dec'] console.log(resultValues); // [100, 93.75, 87.5, 65]
格式二:键值对对象
const averageObj = Object.fromEntries( Object.entries(stats).map(([date, { sum, count }]) => [date, sum / count]) ); // 输出结果 console.log(averageObj); // { '03 Dec': 100, '04 Dec': 93.75, '05 Dec': 87.5, '06 Dec': 65 }
这个方案只需要遍历原始数组一次,后续转换操作效率也很高,完全能处理1000条数据的规模,适配你的需求。
内容的提问来源于stack exchange,提问作者Jonathan Nathanson
相关产品推荐
相关产品推荐

