我正在为购物车功能编写代码。每当我将产品添加到购物车时,对于每种产品,第一次添加时,就会添加称为“数量”的附加属性。

这是我的代码:

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数组中。

09-29 22:55