JS中实现数组切片分块后,如何用reduce求各块平均值?
解决方案:用reduce计算分块数组的平均值
嘿,你已经把数组分块的部分搞定得很棒啦!接下来结合reduce计算每个分块的平均值其实非常直观,咱们直接上代码再拆解细节:
完整实现代码
var data = [0,1,2,3,4,5]; function chunk(arr, len) { var chunks = []; var i = 0; var n = arr.length; while (i < n) { chunks.push(arr.slice(i, i += len)); // 得到 [[0,1,2], [3,4,5]] } return chunks; } // 计算每个分块的平均值 var dataOptimised = chunk(data, 3).map(function(chunk) { // 用reduce累加分块内的所有元素 const sum = chunk.reduce(function(total, currentNum) { return total + currentNum; }, 0); // 初始值设为0,确保累加从0开始 return sum / chunk.length; // 总和除以元素个数得到平均值 }); console.log(dataOptimised); // 输出: [1, 4]
分步解释
- 先分块:调用你写的
chunk(data, 3),把原数组分割成[[0,1,2], [3,4,5]] - 遍历每个分块:用
map方法遍历分块后的数组,对每个分块单独处理 - 用reduce求和:对每个分块,
reduce会从初始值0开始,把分块里的每个元素依次加到总和里。比如第一个分块[0,1,2],累加后得到0+0+1+2=3 - 计算平均值:用分块的总和除以分块的长度(这里每个分块长度都是3),得到平均值
3/3=1和12/3=4,最终组成目标数组[1,4]
简化版(ES6箭头函数)
如果你的运行环境支持ES6语法,还可以把代码简化得更简洁:
var dataOptimised = chunk(data, 3).map(chunk => chunk.reduce((total, num) => total + num, 0) / chunk.length );
内容的提问来源于stack exchange,提问作者lovemyjob
相关产品推荐
相关产品推荐

