You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历数组求连续5个元素平均值遇问题,寻求技术帮助

解决连续5个元素滑动平均值的问题

我来帮你梳理下代码里的核心问题,再给出修正后的方案:

你的代码里的几个关键问题

  • 内层循环逻辑完全偏离了“取连续5个元素”的目标,for (let j = array[i]; (j = array[i + 5]); i++) 既没有正确遍历连续元素,还会修改外层循环的i,导致整个循环逻辑混乱。
  • 用+=操作数组其实是把数组转成字符串拼接,而非往数组里添加元素,应该用数组的push()方法。
  • 外层循环的终止条件错误,应该是i <= array.length - 5,否则当i过大时,i+4会超出数组下标范围,无法取到完整的5个元素。
  • 计算平均值的函数没必要在循环里重复定义,既冗余又影响性能。

修正后的代码(带注释)

function slidingWindowAverage(array, windowSize = 5) { 
  const averages = []; 
  // 外层循环:遍历到能取到完整windowSize个元素的最后一个位置
  for (let i = 0; i <= array.length - windowSize; i++) { 
    // 直接截取从i开始的连续windowSize个元素
    const currentWindow = array.slice(i, i + windowSize); 
    // 计算当前窗口的总和
    const windowSum = currentWindow.reduce((accumulator, current) => accumulator + current, 0); 
    // 计算平均值并加入结果数组
    averages.push(windowSum / windowSize); 
  } 
  console.log(averages); 
  return averages; 
} 

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
slidingWindowAverage(arr); // 输出: [3, 4, 5, 6, 7]

代码说明

  • 我把函数名改成了slidingWindowAverage,更贴合“滑动窗口平均值”的语义,还加了可选参数windowSize,方便以后调整窗口大小(比如改成3个元素)。
  • 用array.slice()直接截取连续元素,比手动循环添加更简洁易读。
  • 外层循环的终止条件i <= array.length - windowSize确保每次都能取到完整的窗口元素,不会出现数组越界问题。

如果偏好手动遍历窗口元素,也可以用下面的写法:

function slidingWindowAverage(array, windowSize = 5) { 
  const averages = []; 
  for (let i = 0; i <= array.length - windowSize; i++) { 
    let sum = 0;
    // 内层循环遍历当前窗口的所有元素
    for (let j = 0; j < windowSize; j++) {
      sum += array[i + j];
    }
    averages.push(sum / windowSize); 
  } 
  console.log(averages); 
  return averages; 
}

内容的提问来源于stack exchange,提问作者Jakub Meller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:23:00