检查Obj是否在Array中,然后运行代码

时间:2014-11-25 20:21:19

标签: javascript arrays array-push

我正在尝试检查对象是否在数组中,我已设法执行此操作但是我无法在块中运行代码。以下是代码段:

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时,如果它不在数组中,则此代码不起作用。

2 个答案:

答案 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();
};