【问题标题】:Shopping cart in javascript object, with an array of json object quantity of itemsjavascript 对象中的购物车,带有 json 对象数量的数组
【发布时间】:2014-05-13 01:10:26
【问题描述】:

我在 javascript/json 和 ASP MVC 中遇到了一些购物车问题

场景: 主要功能是订购产品但不是一个普通用户的购物车,它可以是 2 个用户、3 个用户、1 个用户等,但只有 1 个购物车(javascript 对象)。这取决于特定的买家。所以主要的问题是,如果买家为用户1买了一个“蛋糕”,然后想给用户2买不同日期和相同“蛋糕”的东西,那么产品将是“2个蛋糕”,但是对于第二个用户,第一个用户丢失了“蛋糕”。

我还需要指定蛋糕用户和日期。因此,如果 Buyer 为 user1 购买 2014/05/01 的蛋糕(例如使用日期选择器),然后为 user2 购买 2014/05/02 的蛋糕(例如使用日期选择器),每个用户的产品数量将是 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个蛋糕,如果他再次点击第2个蛋糕,数组将推送一个新元素或另一个数量为1的产品

  • 1 个蛋糕(用户 ID = 1,日期为 2014/05/01)
  • 1 个蛋糕(对于 userID = 1 和 dae 2014/05/01)

如果产品 ID、用户 ID 和日期相同,我希望将数量更新为 2 个蛋糕,因为第二个问题源于第一个问题,我需要通过 ProductID、用户 ID 和日期更新数量,因为如果 买家打算给每个用户买一个蛋糕,产品需要分开,比如这样就错了:


userID = 1 的产品

  • 1 个蛋糕(用户 ID = 1,日期 2014/05/01)
  • 1 个蛋糕(用户 ID = 1,日期 2014/05/02)
  • 1 个蛋糕(用户 ID = 1,日期 2014/05/02)

userID = 2 的产品

  • 1 个蛋糕(用户 ID = 2,日期 2014/05/01)

我希望数组将产品 ID、用户 ID 和日期的数量分开,因此每个产品都需要在用户 ID 和日期之间有一个“链接”,以便具有如下内容:

userID = 1 的产品

  • 1 个蛋糕(用户 ID = 1,日期 2014/05/01)
  • 2 个蛋糕(用户 ID = 1,日期 2014/05/02)

userID = 2 的产品

  • 1 个蛋糕(用户 ID = 2,日期 2014/05/01)

所以如果 user1 和 user 2 在同一日期有相同的产品,我需要一个验证来通过 userID 和 DATE 分隔每个产品的数量,这是个大问题。


实际上我使用 MVC,所以这种方式是使用 json 和 ajax 发送到特定模型(对于 modelstate.isvalid)的最佳方式。所以这段代码是用我需要的东西来“测试”到数据库的。 希望有人可以帮助我。

提前致谢

【问题讨论】:

    标签: javascript jquery arrays asp.net-mvc json


    【解决方案1】:

    当您将新商品推送到购物车时,您需要将其属性与购物车中的对象进行比较,如果产品 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 );
      }
    }
    

    【讨论】:

    • 非常感谢!这是我在与现有数组进行比较时遇到的问题,并且没有附加所有验证,它工作得很好!再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2023-02-15
    • 1970-01-01
    • 2022-12-14
    相关资源
    最近更新 更多