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
相关产品推荐
相关产品推荐

