[英]Checking for numbers in a javascript array using inArray()
我正在通过将产品添加到名为“ oitems”的数组中来构建产品列表的网络购物车。 我正在使用JSON语法。 以下函数旨在接受“数量”(产品数量),“产品”(产品ID),“名称”(产品名称),“价格”(产品价格)和“订单”(包含“商品”的对象'数组)。 当有人单击产品旁边的“添加”按钮时,该功能将触发。
“产品”(产品ID)的范围是1-30。 我希望函数在添加新产品时添加到“商品”数组中,并在某人决定添加后增加“产品”的“数量”时更新产品的现有数量。 它会执行此操作,直到“产品”编号达到“ 10”,而我不知道为什么。 我认为它在'1'和'10'之间变得越来越混乱,但是我不知道如何解决。 有任何想法吗?
function updateOrder(quant, prod, name, price, order) {
var cnt = 0;
//loop through the array to see what we have
$.each(order.oitems, function(x, y) {
//see if the product is already in the array
if ($.inArray(prod, order.oitems[x].product) !== -1) {
// product is already in the cart, update with new quantities
order.oitems.splice(x, 1, {
"quantity": quant,
"product": prod,
"name": name,
"price": price
});
cnt++;
feedback("You already have this product. The quantities have been updated.");
}
});
if (cnt == 0) {
order.oitems.push({
"quantity": quant,
"product": prod,
"name": name,
"price": price
});
feedback("This product has been added to your order.");
}
}
我怀疑您要将字符串传递给updateOrder函数的参数prod
。 在字符串上使用$.inArray()
时,会将其作为单个字符数组进行处理。
更具体地说,字符串“ 10”是两个字符组成的数组:1和0。如果您的商品数组中已经有产品1
,则执行的测试之一将是: $.inArray("10", "1")
会通过,因为” 1“是构成字符串” 10“的字符之一。
您可以-并且应该-将您的情况简化为以下内容:
if(prod == order.oitems[x].product) {...}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.