如何计算Profit/Losses数组的期间变动平均值?
计算Profit/Losses的期间变动平均值
首先,你原来的简单平均值代码存在错误——直接把数组profitLosses除以长度是无效的,因为数组是引用类型,不能直接做算术运算。正确的简单平均值计算应该先求和再除以长度,示例如下:
// 修正后的简单平均值计算 const total = profitLosses.reduce((sum, val) => sum + val, 0); const simpleAvg = profitLosses.length ? total / profitLosses.length : 0; console.log('简单平均值:', simpleAvg);
接下来讲期间变动平均值:这个值指的是相邻两个周期的Profit/Losses差值的平均值,即第2项减第1项得到第1个变动值,第3项减第2项得到第2个变动值,以此类推,最后计算所有变动值的平均。
实现步骤:
- 遍历数组,计算每一对相邻元素的差值(后项 - 前项)
- 收集所有差值到一个新数组
- 计算这个差值数组的总和,再除以差值的数量(原数组长度-1)
完整代码示例:
var profitLosses = [867884, 984655, 322013, -69417, 310503, 522857, 1033096, 604885, -216386, 477532, 893810, -80353, 779806, -335203, 697845, 793163, 485070, 584122, 62729, 668179, 899906, 834719, 132003]; // 计算期间变动数组 const changes = []; for (let i = 1; i < profitLosses.length; i++) { changes.push(profitLosses[i] - profitLosses[i - 1]); } // 计算变动平均值 const changeTotal = changes.reduce((sum, val) => sum + val, 0); const changeAvg = changes.length ? changeTotal / changes.length : 0; console.log('期间变动数组:', changes); console.log('期间变动平均值:', changeAvg);
也可以用更简洁的链式写法:
const changeAvg = profitLosses.slice(1).reduce((acc, curr, idx) => { return acc + (curr - profitLosses[idx]); }, 0) / (profitLosses.length - 1); console.log('期间变动平均值:', changeAvg);
注意:如果原数组长度小于2,变动平均值没有实际意义,此时可以返回0或者做相应的边界处理。
内容的提问来源于stack exchange,提问作者dre86dre
相关产品推荐
相关产品推荐

