我正在为产品列表构建一个网络购物车,方法是将它们添加到名为“oitems”的数组中。我正在使用 JSON 语法。以下函数旨在接受“quant”(产品数量)、“prod”(产品 ID)、“name”(产品名称)、“price”(产品价格)和“order”(包含“oitems”的对象) ' 大批)。当有人单击产品旁边的“添加”按钮时,该函数就会触发。
“prod”(产品 ID)范围为 1-30。我希望该函数在添加新产品时添加到“oitems”数组中,如果有人决定在添加“产品”后增加“数量”,则更新产品的现有数量。它会这样做,直到“prod”编号达到“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) {...}
关于javascript - 使用 inArray() 检查 javascript 数组中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607088/