Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays - Fatal编程技术网

如何在JavaScript中检查元素是否位于对象数组中?

如何在JavaScript中检查元素是否位于对象数组中?,javascript,arrays,Javascript,Arrays,我不明白为什么下面的代码总是转到我的else语句,而不是我的初始if条件 var播放器={ 库存:[ “子弹” ], }; 函数用法(){ 警报(此);//返回“Bullet” 警报(player.inventory);//返回“Bullet” if(this==player.inventory){ document.getElementById(“inventory02”).innerHTML=“您使用过”+这个; 警惕(“在库存中”);//她跳过了这个 }否则{ document.getE

我不明白为什么下面的代码总是转到我的
else
语句,而不是我的初始
if
条件

var播放器={
库存:[
“子弹”
],
};
函数用法(){
警报(此);//返回“Bullet”
警报(player.inventory);//返回“Bullet”
if(this==player.inventory){
document.getElementById(“inventory02”).innerHTML=“您使用过”+这个;
警惕(“在库存中”);//她跳过了这个
}否则{
document.getElementById(“inventory02”).innerHTML=“您没有”+这个;
警惕(“不在清单中”);//她总是这样做
}
}
使用项目符号
  • player.intory
    是一个数组,您需要检查该项目是否在数组中,且不等于该项目
  • 这里使用的
    this
    是(你连接它,比较它..这是错误的),你可以传递一个参数,或者更好的是,在元素上保留一个表示项和它的属性
  • Array.includes
    is。如果您需要它在IE上运行,而您不需要传输js代码(例如),您可以使用或
  • 我用
    console.log
    替换了
    alert
    ,因为它在示例中更清晰(也不那么烦人)
  • 在申报库存后,您不需要额外的
  • var播放器={
    库存:[
    “子弹”
    ]
    };
    功能使用(e){
    var item=e.target.getAttribute(“item”);
    console.log(item);//返回“Bullet”
    console.log(player.inventory);//返回“Bullet”
    if(玩家库存包括(物品)){
    document.getElementById(“inventory02”).innerHTML=“您使用过的”+项;
    警惕(“在库存中”);//她跳过了这个
    }否则{
    document.getElementById(“inventory02”).innerHTML=“您没有”+项;
    警惕(“不在清单中”);//她总是这样做
    }
    }
    使用项目符号
    
    if“if(this==player.inventory[0])”这是您更改的唯一一行,它没有帮助。我这边也有同样的结果。请注意,我正在使用外部js文件,因为它可能会影响您的测试。编辑:看起来你的答案与我之前评论的答案有很大的不同。迫不及待地想试试。是的,我知道你为什么想要它作为一个数组。您也可以按“运行代码片段”(蓝色按钮)并尝试。我使用“this”是因为我最终将“拾取”(推送)许多项目(对象)到我的库存(对象数组)。。。将“Bullet”硬编码到我的清单数组中只是为了调试。另外,还留下了额外的逗号,因为player对象的内部最终将远远超过库存数组。(因此我的原始代码的形状)--考虑到这些因素,您的方法仍然有效吗?**我正在努力使我的js代码尽可能不依赖HTML(我想不起这个术语)。建议使用独立参数来代替
    this
    ,以便在我扩展时帮助将来验证(并且更容易调试),这似乎是非常宝贵的。你的第二个建议将更多的东西放在js方面,并完美地工作,即使在我引入第二个“项目”之后。我欠你的债。。。直到下次@MaorRefaeli——我担心我最初的问题“代码”的重构没有模仿我这方面的操作顺序,到目前为止,代码片段并不代表当我使用单独的外部文件运行自己的代码时会发生什么。但是,如果您确信单独的和外部的JS文件没有关系,那么就这样吧。拆分JS代码是一种常见做法(您有许多捆绑策略和库,可以帮助您将代码合并到一个文件中)。不管怎样,只要文件已加载且变量在其作用域中可用,它们是否在单独的文件中并不重要。OK。比如说我没有犯那个错误。不管怎么说,我似乎在使用单独的和外部的文件时遇到的麻烦比你提到的要多得多,但我还是决定将东西保存在单独的文件中(更像是模块,一个用于对象,一个用于函数等等)。希望我的问题越来越少与外部文件相关。谢谢你在所有方面的帮助。