Javascript 仅当数组中不存在对象时才将该对象添加到数组中
我正在尝试建立一个库存系统,在这个系统中,当获得一个项目时,如果该项目在数组中不存在,它只会将其放入数组中。然后,不管它是否放入数组,在数组中找到该项并将其数量增加1。这就是我目前的情况: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)
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 doarr.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])这个函数,它将根据您的属性查找索引