好吧,我已经搜索并尝试了不起作用的代码块。这就是我得到的。
当我点击图像时,我正在构建一个数组。
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 A
和 Item 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/