新手开发者求助:为何stock[item]-1无法实现库存数量递减?
问题分析与解决
为什么stock[item]-1无法生效?
stock[item]-1只是完成了减法计算,得到当前库存减1的数值,但没有把这个新值存回stock对象的对应属性里。相当于你算出了新库存,却没把它写回去,所以原库存自然不会变化。
为什么stock = stock[item]-1会报错?
原本stock是一个存储所有商品库存的对象。执行stock = stock[item]-1后,你把stock变量直接改成了一个数字(比如第一次处理香蕉时,变成了6-1=5)。后续循环再访问stock[item]时,就是试图从数字上读取属性——但数字不是对象,不支持这种操作,所以会触发报错。
正确的库存递减写法
要让库存真正减少,必须把计算后的新值重新赋值给对应的属性,两种常用写法:
- 简洁的复合赋值:
stock[item] -= 1; - 显式赋值:
stock[item] = stock[item] - 1;
修改后的完整函数:
function howMuch(){ let total =0; for(let i=0; i<shoppingList.length; i++){ let item = shoppingList[i]; if(item in stock){ if(stock[item]>0){ total+=prices[item]; // 正确更新库存 stock[item] -= 1; } else { console.log(`Sorry we don't have ${item}`); } } console.log(total); } }
内容的提问来源于stack exchange,提问作者David Perlow
相关产品推荐
相关产品推荐

