我正在为购物车功能编写代码。当我第一次为每个产品添加产品到购物车时,会添加称为数量的附加属性。
这是我的代码:
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变量的值应该具有this属性。
我在这里度过了不愉快的时光。
答案 0 :(得分:1)
我不确定我是否理解您的代码,但我认为cartData是一个对象,您将该对象推送到userCart,就像这样
userCart.push(cartData);
然后使用此命令将同一对象推送到cartConsolidatedData
cartConsolidatedData.push(userCart[x]);
所以当你这样做时:
cartConsolidatedData[y].quantity=1;
您正在向cartData对象添加属性,而不是向cartConsolidatedData数组添加属性。因为cartConsolidatedData [y]是一个cartData对象,因为它是一个引用,这意味着你对它所做的任何更改也会反映在指向同一cartData的userCart数组中。