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

运行JS代码报错Cannot read property 'sort' of undefined,哪里出错了?

报错根因

Cannot read property 'sort' of undefined
这个报错完全是因为你写了items.value.sort这行代码导致的:items是一个存储对象的数组,数组本身没有value属性,value是数组里每一个子对象的属性,所以items.value的取值结果是undefined,你尝试在undefined上调用sort方法就会触发这个错误。

其他代码问题

  • 命名冲突:你的函数名、内部累加变量都叫sort,属于重复命名,会引发不可预期的逻辑错误
  • 逻辑匹配错误:从变量命名来看你是想实现限重下的最大价值计算,你累加的是物品的value,却和最大重量maxWeight做比对,逻辑完全不匹配
  • 排序逻辑错误:你想按物品的value倒序排列,正确写法是直接对items数组调用sort方法,在排序回调中比对两个元素的value值
  • 分支逻辑错误:你原有代码中累加值小于等于最大重量就break跳出循环,逻辑完全倒置,会导致刚进入循环就直接跳出,拿不到正确结果

修正后代码

const items = [
    { id: 1, value:5, weight: 14 },
    { id: 2, value:8, weight: 3  },
    { id: 3, value: 10, weight: 8},
    { id: 4, value: 2, weight: 4},
];

// 给maxWeight加const声明,避免成为全局变量
const maxWeight = 15;

// 修改函数名避免命名冲突
function getMaxValue() {
    // 正确的按value倒序排序写法
    items.sort((a, b) => b.value - a.value);
    let totalValue = 0;
    let usedWeight = 0;
    for(let i = 0; i < items.length; i++) {
        const currentItem = items[i];
        // 判断加入当前物品后是否超重
        if (usedWeight + currentItem.weight <= maxWeight) {
            totalValue += currentItem.value;
            usedWeight += currentItem.weight;
        }
    }
    console.log('最大可带价值为:', totalValue);
}

getMaxValue();

修正说明

  1. 修正了排序写法,直接对items数组排序,通过回调比对子元素的value属性实现倒序
  2. 修正了命名冲突问题,避免同名变量覆盖
  3. 拆分了总价值、已用重量两个累加变量,逻辑更清晰
  4. 修正了判断逻辑,先判断是否超重再决定是否累加物品,符合背包问题的常规逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 06:39:03