javascript - 如果 ID 存在于 angularjs 的 javascript 数组中

标签 javascript arrays angularjs

好吧,我已经搜索并尝试了不起作用的代码块。这就是我得到的。

当我点击图像时,我正在构建一个数组。

    invoices.addItem = function(id) {
        var itemRef = new Firebase(fbUrl+'/items/'+id);
        itemRef.once("value", function(snapshot) {
            invoices.newInvoiceItems.push({
                'id'    : id,
                'name'  : snapshot.val().name,
                'price' : snapshot.val().prices.sale,
                'qty'   : '1'
            });
        }); 
    }

我想检查再次单击图像时传递的ID是否已经存在于数组中,是否增加了数量。

我所要求的只是一种简单的方法来检查 id 是否存在,如果确实返回 true,否则返回 false。

if(id exists)
{
  return true;
}
return false;

如何让 id 存在工作!?!?!?!?!?!?!?!

更新

这就是我所拥有的一切:

invoices.addItem = function(id) {
        if(invoices.checkItem(id))
        {
            var index;
            for (index = 0; index < invoices.newInvoiceItems.length; ++index) {
                if(invoices.newInvoiceItems[index].id === id)
                {
                    var qty = invoices.newInvoiceItems[index].qty;
                    invoices.newInvoiceItems[index].qty = qty++;
                }
                else
                {
                    return false;
                }
            }
        }
        else
        {

            var itemRef = new Firebase(fbUrl+'/items/'+id);
            itemRef.once("value", function(snapshot) {
                invoices.newInvoiceItems.push({
                    'id'    : id,
                    'name'  : snapshot.val().name,
                    'price' : snapshot.val().prices.sale,
                    'qty'   : '1'
                });
            });

        }
    }

    invoices.removeItem = function(index) {
        invoices.newInvoiceItems.splice(index, 1);
    }

    invoices.checkItem = function(id) {
        var index;
        for (index = 0; index < invoices.newInvoiceItems.length; ++index) {
            if(invoices.newInvoiceItems[index].id === id)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

假设我有两个项目 Item AItem B。如果我单击项目 A,它会将其添加到数组中。然后再次点击,不会添加,只会增加一次数量。现在,如果我单击项目 B 而不刷新页面,请注意,每次我单击项目 B 时,它都会一遍又一遍地添加它。

我已经控制台记录了返回的 ID,它始终是相同的,即使每个项目都有自己的 ID。

最佳答案

您可以使用Array.prototype.filter快速轻松地找到数组中的项目。如果找到该项目...那么您就知道它存在。

var existingItem = invoices.newInvoiceItems.filter(function(item){
    return item.id === id;
})[0];

if(existingItem ){
    ++existingItem.qty
}else{
    //do your firebase thing...
    var itemRef = new Firebase(fbUrl+'/items/'+id);
    itemRef.once("value", function(snapshot) {
        invoices.newInvoiceItems.push({
            'id'    : id,
            'name'  : snapshot.val().name,
            'price' : snapshot.val().prices.sale,
            'qty'   : 1
        });
    });
}

关于javascript - 如果 ID 存在于 angularjs 的 javascript 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020790/

相关文章:

AngularJS : ui grid show multi lines in a cell

javascript - 在不重新加载的情况下显示 MySQL 结果... AJAX 失败

java - 通过套接字传输字节数组

javascript - 仅切换类的一个实例

javascript - 如何在 JS 对象中获取父属性?

arrays - 神秘 IFS 行为

java - 如果我们想将atmosphere-jersey用于websocket,那么应用程序架构应该是怎样的?

javascript - 如何在 ng-option 中使用空白值,而不是 NULL

javascript - 如何在调整大小函数中只调用一次函数?

javascript - 使用kinetic js更新 Canvas