繁体   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