Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过对象键循环的函数抛出未定义的_Javascript_Loops_Object_Ecmascript 6_Foreach - Fatal编程技术网

Javascript 通过对象键循环的函数抛出未定义的

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){

我试图在调用sale函数时遍历Inventory对象,它应该检查请求的物品及其数量

销售时始终更新库存,如果de对象内的物品达到0,则应从库存中删除该物品

到目前为止,我用forEach和一个简单的For尝试了这个方法,但没有成功

调用函数时,我总是得到一个“未定义的”

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不应该起作用,因为您在库存对象上没有任何要出售的密钥。我几乎成功了!,我唯一缺少的就是更新对象。谢谢你,尼古拉斯!