我正在为购物车功能编写代码。每当我将产品添加到购物车时,对于每种产品,第一次添加时,就会添加称为“数量”的附加属性。
这是我的代码:
myStoreCartService.factory('Cart',function() {
var userCart = [];
var cartSummary = [];
var cartConsolidatedData = [];
var currentTotalMaster;
function formCart() {
cartConsolidatedData = [];
var dup = false;
var temp;
for(x in userCart) {
dup = false;
for(z in cartConsolidatedData) {
if(cartConsolidatedData[z].productname == userCart[x].productname) {
cartConsolidatedData[z].quantity = cartConsolidatedData[z].quantity + 1;
dup = true;
break;
}
}
if(!dup) {
// temp = userCart[x];
// temp.quantity = 1;
cartConsolidatedData.push(userCart[x]);
for(y in cartConsolidatedData) {
if(cartConsolidatedData[y].productname == userCart[x].productname) {
cartConsolidatedData[y].quantity = 1;
break;
}
}
}
}
};
return {
addItemToCart: function(cartData) {
console.log(cartData);
userCart.push(cartData);
formCart();
},
retrieveCart: function() {
return userCart;
}
});
在这里,即使userCart变量中的第一个项目也获得了数量属性,但是只有cartConsolidatedData变量的值才应该具有此属性。
我在这里陷入了糟糕的时光。
最佳答案
我不确定我是否理解您的代码,但我想cartData是一个对象,您可以像这样将其推入userCart
userCart.push(cartData);
然后使用此命令将同一对象推送到cartConsolidatedData
cartConsolidatedData.push(userCart[x]);
因此,当您执行此操作时:
cartConsolidatedData[y].quantity=1;
您正在向cartData对象添加属性,而不是向cartConsolidatedData数组声明状态。因为cartConsolidatedData [y]是cartData对象,并且由于它是引用,所以您所做的任何更改也将反映在指向相同cartData的userCart数组中。