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

JS编写的糖果库存订单计算函数为何始终返回空对象{}?

问题根因分析

核心错误点

你提供的第一个报错版本allCandyOrders函数存在拼写失误:for循环的终止条件中,数组长度属性length被误写为lengh(缺失字母t)。

错误触发逻辑

  • 数组本身不存在lengh属性,读取inventory.lengh会返回undefined
  • 数字对比时undefined会被隐式转换为NaN,0 < NaN的判定结果永远为false
  • 这直接导致for循环从未执行,orderSet没有被写入任何属性,最终永远返回空对象{}

为何内嵌逻辑后可以正常运行

你第二个可正常运行的版本中,for循环的终止条件使用了正确的inventory.length写法,循环可以正常遍历传入的inventory数组,和你是否把findOrderQuantity的逻辑内嵌到函数内部没有关联,也不存在作用域问题。

修正后的代码

仅需要修改拼写错误即可,原有函数拆分逻辑完全可用:

function findOrderQuantity(candyObject) {
  if (candyObject.inStock < candyObject.weeklyAverage) {
    return 2 * candyObject.weeklyAverage;
  } else {
    return 0;
  }
  return 0;
}


function allCandyOrders(inventory) {
  let orderSet = {};
  let quantity = 0;
  let name = '';
  // 仅修改lengh为length即可恢复正常
  for (let i = 0; i < inventory.length; i++) {
    quantity = findOrderQuantity(inventory[i]);
    name = inventory[i].candy;
    orderSet[name] = quantity;
  }

  return orderSet;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:07