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

JavaScript求最高平均值遇TypeError错误,请求调试帮助

问题排查与修复方案

错误原因分析

TypeError: Cannot read properties of undefined (reading 'length') 明确说明你在尝试读取一个undefined值的length属性,即循环执行时nums变量为undefined。常见触发场景:

  • 函数接收的参数不是有效数组,比如传入了undefined、null或非数组类型
  • 循环逻辑中意外修改了nums变量,导致其被赋值为undefined
  • 测试用例存在非法输入,比如未传参数、传入空值

修复步骤

  1. 添加参数校验
    在函数开头拦截非法输入,避免后续逻辑报错:

    function findMaxAverage(nums, k) {
        // 校验nums是否为有效数组,同时检查窗口大小合法性
        if (!Array.isArray(nums) || nums.length < k || k <= 0) {
            return 0; // 可根据业务需求返回null、抛出错误或其他默认值
        }
        // 后续业务逻辑...
    }
    
  2. 检查循环变量操作
    确认循环过程中没有意外覆盖nums变量,比如不要在循环内写nums = ...这类修改原变量的代码。

  3. 验证测试用例
    排查测试用例是否符合参数要求:

    • 避免直接传入undefined作为第一个参数
    • 确保测试用例中的数组是合法类型(不是null、普通对象等)

示例修复代码

假设原逻辑是滑动窗口求子数组最高平均值,修复后的完整代码如下:

function findMaxAverage(nums, k) {
    // 参数合法性校验
    if (!Array.isArray(nums) || nums.length < k || k <= 0) {
        return 0;
    }

    let sum = 0;
    // 计算初始窗口和
    for (let i = 0; i < k; i++) {
        sum += nums[i];
    }
    let maxSum = sum;

    // 滑动窗口遍历
    for (let i = k; i < nums.length; i++) {
        sum = sum - nums[i - k] + nums[i];
        maxSum = Math.max(maxSum, sum);
    }

    return maxSum / k;
}

// 合法测试用例
console.log(findMaxAverage([1,12,-5,-6,50,3], 4)); // 输出12.75

调试技巧

  • 在循环前添加console.log(nums),直接查看当前nums的值,确认是否为undefined
  • 使用浏览器开发者工具的断点功能,在报错行暂停,查看调用栈和变量实时状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:13