我正在尝试检查对象是否在数组中,我已设法执行此操作但是我无法在块中运行代码。以下是代码段:
basket.add = function(item) {
for(var i = 0; i < this.items.length; i++){
if(item === this.items[i]){
basket.items[i].count += 1;
}else{
basket.items.push(item);
};
};
basket.print();
};
当我在没有if语句的情况下运行代码时,除了再次推送obj之外,它的工作正常。当我检查并推送obj时,如果它不在数组中,则此代码不起作用。
答案 0 :(得分:3)
您当前的代码循环遍历items
,每次在item
中找到与items
匹配的item
时,将basket.add = function(item) {
var i = basket.items.indexOf(item);
if (i == -1) {
basket.items.push(item);
}
else {
basket.items[i].count += 1;
}
};
的另一个引用推送到数组的末尾1}}。我不认为这是你想要的。
相反,您可以使用
.indexOf
对于IE8及更早版本{{1}}的用户不会工作,所以如果这很重要,您可以添加this polyfill。
答案 1 :(得分:1)
您正在循环items
,试图确定所添加的项目是否已经在&#34;购物篮&#34;:
for(var i = 0; i < this.items.length; i++){
if(item === this.items[i]){
....
我猜你不想为数组中的每个项目添加一次项目!因此,移动在循环外添加新项目。
另一个问题是你要检查this.items
的长度,然后推送到basket.items
- 这可能是有效的,但我怀疑没有。
basket.add = function(item) {
var foundItem = false;
for(var i = 0; i < this.items.length; i++){
if(item === this.items[i]){
this.items[i].count += 1;
foundItem = true;
break;
}
};
if(!foundItem){
this.items.push(item);
}
basket.print();
};