簡體   English   中英

javascript對象中的購物車,帶有json對象數量的商品數組

[英]Shopping cart in javascript object, with an array of json object quantity of items

我在javascript / json和ASP MVC中遇到一些購物車問題

場景:主要功能是訂購產品,但不是1位用戶的普通購物車,它可以是2位用戶,3位用戶,1位用戶等, 但只能訂購1個購物車 (javascript對象)。 那取決於特定的購買者 因此,主要問題是,如果買方為用戶1購買了一個“蛋糕”,然后又想用不同的日期和相同的“蛋糕”向用戶2購買某物,那么該產品將是“ 2個蛋糕”,但對於第二個用戶來說,第一個用戶丟失了“蛋糕”。

我也需要特定用戶和日期。 因此,如果買方為2014年1月1日的用戶1購買蛋糕(例如,使用日期選擇器),然后為2014年2月2日的用戶2購買蛋糕(例如,使用日期選擇器),則產品的數量為每個用戶1個蛋糕,而不是2個蛋糕與數組中的蛋糕數量。

實際上,我正在將javascript對象用於購物車,就像這樣

var ShoppingCart = {
    BuyerID: 1, //I will handle this later
    StoreID: 1,
    Total: 0,
    ShoppingCartItems: [] //array with json objects
};

然后我使用一個函數將按鈕上需要的元素推送到數組

function AddItem (ProductID,ProductName, Description, Price, Quantity, StoreID){
       var UserID = $("#hiddenUserID").val(); //e.g. = 1
       var ProductDate = $("#hiddenDateField").val(); //e.g. = 2014/05/01
         ShoppingCartItems.push({
            "ProductID": ProductoID,
            "ProductName": ProductName,
            "Description": Description,
            "Price": Price,
            "Quantity": Quantity,
            "StoreID": StoreID,
            "UserID": UserID, //this will change later
            "ProductDate": ProductDate //this will change if the buyer choose another day
        })
}

每當買方單擊按鈕時,此功能就起作用。 產品裝載了ajax,這不是問題。 用戶從產品中選擇之后,將使用所選產品和我使用的所有規格創建一個新的陣列。 所以我有兩個問題

例如,如果買方選擇1個蛋糕,但他忘記了需要2個蛋糕,那么如果他再次單擊第二個蛋糕,則陣列將推入數量為1的新元素或其他產品

  • 1個蛋糕(對於userID = 1,日期為2014/05/01)
  • 1個蛋糕(對於userID = 1,和dae 2014/05/01)

我想如果具有相同ProductID,userID和日期的產品將數量更新為2個蛋糕,因為第二個問題源自第一個蛋糕,我需要通過ProductID,userID和日期來更新數量,因為如果買方打算購買對於每個用戶來說都是一個蛋糕,需要將產品分開,例如這種方式是錯誤的:


userID = 1的產品

  • 1個蛋糕(用於userID = 1,日期2014/05/01)
  • 1個蛋糕(用於userID = 1,日期2014/05/02)
  • 1個蛋糕(用於userID = 1,日期2014/05/02)

userID = 2的產品

  • 1個蛋糕(用於userID = 2,日期2014/05/01)

我希望數組將產品ID,用戶ID和日期的數量分開,因此每個產品都需要在用戶ID和日期之間有一個“鏈接”,以便具有以下內容:

userID = 1的產品

  • 1個蛋糕(用於userID = 1,日期2014/05/01)
  • 2個蛋糕(用於userID = 1,日期2014/05/02)

userID = 2的產品

  • 1個蛋糕(用於userID = 2,日期2014/05/01)

因此,如果user1和user 2在同一日期具有相同的產品,則需要驗證以按userID和DATE分隔每種產品的數量,這是個大問題。


實際上,我使用MVC,因此這種方式是將json和ajax發送到特定模型的最佳方法(對於modelstate.isvalid)。 因此,此代碼已通過“測試”了我需要的正確數據到數據庫的內容。 希望有人可以幫助我。

提前致謝

將新項目推入購物車時,需要將其屬性與購物車中的對象進行比較,如果產品ID,用戶ID和日期匹配,則要將新數量添加到舊對象的舊數量中而不是推一個新的。 或者,您可以在添加項目后對購物車數組進行后處理,並在添加數量的同時合並重復項。 我不確定哪種方法更好。

function AddItem (ProductID,ProductName, Description, Price, Quantity, StoreID) {
  var merged = false;
  var UserID = $("#hiddenUserID").val(); //e.g. = 1
  var ProductDate = $("#hiddenDateField").val(); //e.g. = 2014/05/01
  var newItemObj = {
    "ProductID": ProductID,
    "ProductName": ProductName,
    "Description": Description,
    "Price": Price,
    "Quantity": Quantity,
    "StoreID": StoreID,
    "UserID": UserID,
    "ProductDate": ProductDate
  };
  // loop through items in cart
  for ( var i = 0; i < ShoppingCartItems.length; i++ ) {

    // if product ID, user ID, and date are the same
    if ( ShoppingCartItems[i].ProductID   == newItemObj.ProductID &&
         ShoppingCartItems[i].UserID      == newItemObj.UserID &&
         ShoppingCartItems[i].ProductDate == newItemObj.ProductDate ) {

      // add the quantity of the new obj to the old one
      ShoppingCartItems[i].Quantity += newItemObj.Quantity;

      // if two items are merged, set a flag
      merged = true;
    }
  };
  // if no merge happened, just add the item normally
  if ( !merged ) {
    ShoppingCartItems.push( newItemObj );
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM