javascript - javascript 对象中的购物车,带有 json 对象数量的数组

标签 javascript jquery arrays asp.net-mvc json

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

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

我还需要使蛋糕的用户特定和日期特定。因此,如果买家为用户1在2014/05/01购买了一个蛋糕(例如使用日期选择器),然后为用户2在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 年 5 月 1 日)
  • 1 个蛋糕(用户 ID = 1,日期为 2014/05/01)

我希望如果产品具有相同的 ProductID、userID 和日期,请将数量更新为 2 个蛋糕,因为第二个问题源于第一个问题,我需要按 ProductID、userID 和日期更新数量,因为如果 买家打算给每个用户买一个蛋糕,产品需要分开,比如这样是错误的:

<小时/>

userID = 1 的产品

  • 1 个蛋糕(用户 ID = 1,日期 2014 年 5 月 1 日)
  • 1 个蛋糕(用户 ID = 1,日期 2014 年 5 月 2 日)
  • 1 个蛋糕(用户 ID = 1,日期 2014 年 5 月 2 日)

userID = 2 的产品

  • 1 个蛋糕(用户 ID = 2,日期 2014 年 5 月 1 日)
<小时/>

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

userID = 1 的产品

  • 1 个蛋糕(用户 ID = 1,日期 2014 年 5 月 1 日)
  • 2 个蛋糕(用户 ID = 1,日期 2014 年 5 月 2 日)

userID = 2 的产品

  • 1 个蛋糕(用户 ID = 2,日期 2014 年 5 月 1 日)

因此,如果用户 1 和用户 2 在同一日期拥有相同的产品,我需要进行验证以按用户 ID 和日期分隔每个产品的数量,这是一个大问题。

<小时/>

实际上我使用的是 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 );
  }
}

关于javascript - javascript 对象中的购物车,带有 json 对象数量的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614644/

相关文章:

javascript - 在nodejs中通过带有构造函数的模块公开多个对象

javascript - 如何在 HTML5 Canvas 上进行正确的边界检查?

c++ - 为什么用户定义类型的数组必须调用其默认构造函数?

python - 如何从数据帧创建序列并将它们放入数组的数组或列表中?

javascript - n.getFullYear 不是 d3 中的函数错误

javascript - HTML5 与 JavaScript

javascript - 如何编辑 highchart 标签的 html?

javascript - 动态更改 jQuery 移动图标背景颜色

jquery - 使用 browserify 时找不到模块 'jquery'

java - 将字符串插入已排序的数组中