Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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_Object - Fatal编程技术网

Javascript 仅当数组中不存在对象时才将该对象添加到数组中

Javascript 仅当数组中不存在对象时才将该对象添加到数组中,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试建立一个库存系统,在这个系统中,当获得一个项目时,如果该项目在数组中不存在,它只会将其放入数组中。然后,不管它是否放入数组,在数组中找到该项并将其数量增加1。这就是我目前的情况: function newItem(){ apple = new uniqueItem("apple", "resources/apple.png") if (inventory.indexOf(apple) != null){ inventory.push(apple)

我正在尝试建立一个库存系统,在这个系统中,当获得一个项目时,如果该项目在数组中不存在,它只会将其放入数组中。然后,不管它是否放入数组,在数组中找到该项并将其数量增加1。这就是我目前的情况:

function newItem(){
    apple = new uniqueItem("apple", "resources/apple.png")

    if (inventory.indexOf(apple) != null){
        inventory.push(apple)
    }
    inventory[inventory.indexOf(apple)].amount += 1
}

我对javascript还是相当陌生,如果有人能给我指出正确的方向,我将不胜感激。

你可以自己做!只需遍历所有库存,并检查您试图插入的项目是否已经存在。如果它不存在,则插入它

此处不应使用indexOf。使用下面类似的方法迭代数组并与其中的每个对象进行比较。indexOf将字符串作为值而不是对象

function containsObject(obj, list) {
   var i;
   for (i = 0; i < list.length; i++) { 
     if (list[i] === obj) { return true; } 
   } 
   return false;
 }
函数containsObject(对象,列表){
var i;
对于(i=0;i
我想这对你也有帮助

    <p> Year : <select style="width: 150px;">
        <option value ="2014">2014</option>
        <option value ="2015">2015</option>
        <option value =" '2015">2015</option>

    </select>
    </p>

    <input  type="submit" value="Submit">
            <input type="submit" value="cancel">

</center>
</body>

年份:
2014
2015
2015


有一个
Array.prototype.includes()
方法可以为您提供服务,仅用于此项工作

var o1 = {a:1,b:2},
   arr = [];
arr.push(o1);
arr.includes(o1); // <- true so don't add again
VarO1={a:1,b:2}, arr=[]; arr.push(o1);
附件包括(o1);//<代码>索引(对象)?我想您应该处理对象的键..
var arr=[{a:10},{b:20}];var a={a:10};arr.indexOf(a)
将是
-1
啊,好吧,但是出于兴趣,它会像'arr.indexOf({name:“apple”,imgLink:“resources/apple.png”})一样工作吗?如果对象的所有键和值都相等,那么两个对象可以相等..这就是为什么需要迭代和比较..啊!什么?怎么做?
var-arr=[{a:10},{b:20}]
arr.includes({a:10})
被评估为
false
@RayonDabre so do
arr.indexOf({a:10})返回-1。另外,在我上面的示例中,arr.indexOf(o1)将返回0,如果您没有像
~arr.indexOf(o1)
这样正确地检查,这可能会产生false,这会使代码无法读取。最好是实现
Array.prototype.includes()
,因为它已经存在。原因是您传递的是
reference
而不是值。
reference
可以指向相同的
对象
IE不支持包含函数。你需要最新的chrome和firefox。最好使用indexOf或循环并匹配。如果使用lodash,可以检查.findIndex(array,[predicate=.identity])这个函数,它将根据您的属性查找索引