Javascript 通过对象键循环的函数抛出未定义的
我试图在调用sale函数时遍历Inventory对象,它应该检查请求的物品及其数量 销售时始终更新库存,如果de对象内的物品达到0,则应从库存中删除该物品 到目前为止,我用forEach和一个简单的For尝试了这个方法,但没有成功 调用函数时,我总是得到一个“未定义的”Javascript 通过对象键循环的函数抛出未定义的,javascript,loops,object,ecmascript-6,foreach,Javascript,Loops,Object,Ecmascript 6,Foreach,我试图在调用sale函数时遍历Inventory对象,它应该检查请求的物品及其数量 销售时始终更新库存,如果de对象内的物品达到0,则应从库存中删除该物品 到目前为止,我用forEach和一个简单的For尝试了这个方法,但没有成功 调用函数时,我总是得到一个“未定义的” const inventory = { shoes: 10, socks: 6, shirts: 10, pants: 5, } function sale(arti, amount){
const inventory = {
shoes: 10,
socks: 6,
shirts: 10,
pants: 5,
}
function sale(arti, amount){
Object.keys(inventory).forEach(key => {
let keyitem = inventory[key]
if(keyitem === arti){
if(keyitem.val > amount){
keyitem.val - amount
return 'Article sold'
} else if (keyitem.val === 0){
keyitem.val - amount
delete inventory.key
return 'Article sold'
} else if (keyitem.val < amount){
return 'Theres no inventory for the amount you requested'
}
}
});
}
sale('shoes', 7)
const inventory={
鞋子:10,
袜子:6,
衬衫:10件,
裤子:5,
}
功能销售(艺术,金额){
Object.key(库存).forEach(key=>{
let keyitem=库存[关键]
如果(关键项===arti){
如果(keyitem.val>金额){
keyitem.val-金额
退回“已售出物品”
}else if(keyitem.val==0){
keyitem.val-金额
删除inventory.key
退回“已售出物品”
}否则如果(keyitem.val<金额){
返回“您申请的金额没有存货”
}
}
});
}
销售('鞋',7)
如果可以进行销售并更新库存对象,则函数应返回
因此,如果我调用sale('shoes',7),然后控制台记录对象,shoes现在应该是3。您不能从
forEach
回调函数中返回。您可以使用实际的foreach
循环来实现:
在这里,我删除了部分代码,向您展示如何从foreach
循环内部返回。代码中仍然存在一些逻辑错误,但这些不是本演示的主题
const inventory={
鞋子:10,
袜子:6,
衬衫:10件,
裤子:5,
}
功能销售(艺术,金额){
用于(输入库存){
let keyitem=库存[关键]
如果(键项===10){
return“从foreach循环内部返回”;
}
}
}
控制台日志(销售('socks',7))代码>没有来自forEach
的返回值。如果要返回,请使用for(Object.keys(inventory))的const key{…}
或for(Object.entries(inventory))的const[key,keyItem]{…}
。而且删除inventroy.key
没有意义。我认为您希望delete inventory[key]
以编写代码的方式,keyitem
永远不会等于arti
参数。.forEach()
回调的返回值在任何情况下都会被忽略。哦,没错,我尝试将返回值更改为console.logs,但得到了与之前相同的“未定义”值删除目录。键也是错误代码-它尝试从目录中删除文本键“键”
。使用方括号删除包含“key”变量值的密钥:delete inventory[key]
delete inventory.key不应该起作用,因为您在库存对象上没有任何要出售的密钥。我几乎成功了!,我唯一缺少的就是更新对象。谢谢你,尼古拉斯!