JavaScript--自动更新的数组变量

时间:2014-07-19 09:18:33

标签: javascript angularjs

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

这是我的代码:

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属性。

我在这里度过了不愉快的时光。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解您的代码,但我认为cartData是一个对象,您将该对象推送到userCart,就像这样

userCart.push(cartData);

然后使用此命令将同一对象推送到cartConsolidatedData

cartConsolidatedData.push(userCart[x]);

所以当你这样做时:

cartConsolidatedData[y].quantity=1;

您正在向cartData对象添加属性,而不是向cartConsolidatedData数组添加属性。因为cartConsolidatedData [y]是一个cartData对象,因为它是一个引用,这意味着你对它所做的任何更改也会反映在指向同一cartData的userCart数组中。