Корзина в объекте javascript, с массивом объектов json, количество предметов

0

Я столкнулся с некоторыми проблемами с некоторой корзиной покупок в javascript/json и ASP MVC

Сценарий: основная функция заключается в том, чтобы заказывать продукты, но не является обычной корзиной покупок для 1 пользователя, она может быть для 2 пользователей, 3 пользователей, 1 пользователя и т.д., Но ТОЛЬКО 1 корзина для покупок (объект javascript). Это то, что зависит от конкретного покупателя. Таким образом, основная проблема заключается в том, что если Покупатель покупает "торт" для пользователя1, а затем хочет купить что-то для пользователя2 с другой датой и тем же "торт", продукт будет "2 торты", но для второго пользователя, а первый пользователь потерял "торт".

Мне нужно сделать конкретным пользователем торт и конкретную дату. Поэтому, если Покупатель купит торт для пользователя1 за 2014/05/01 (например, с помощью datepicker), а затем купите торт для пользователя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, что не проблема. После выбора пользователем продукта будет создан новый массив с выбранным продуктом и всеми спецификациями, которые я использую. Итак, у меня есть 2 проблемы

Если Покупатель выбирает, например, 1 пирог, но он забыл, что ему нужно 2 пирога, если он снова щелкнет 2-м пирогом, массив подтолкнет новый элемент или другой продукт с количеством 1

  • 1 Торт (для userID = 1 и дата 2014/05/01)
  • 1 Cake (для userID = 1 и dae 2014/05/01)

Я хочу, чтобы продукт с тем же ProductID, идентификатором пользователя и датой обновил количество до 2 тортов, потому что из-за второй проблемы возникает первая проблема, мне нужно обновить количество с помощью ProductID, идентификатора пользователя и даты, потому что, если Покупатель планирует купить торт для каждого пользователя, продукт нужно разделить, например, таким образом это неправильно:


Продукты для 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)

Я хочу, чтобы массив имел количество, разделенное для productID, userID и date, поэтому каждый продукт должен иметь "ссылку" между идентификатором пользователя и датой, чтобы иметь что-то вроде этого:

Продукты для userID = 1

  • 1 торт (для userID = 1, дата 2014/05/01)
  • 2 торта (для userID = 1, дата 2014/05/02)

Продукты для userID = 2

  • 1 торт (для userID = 2, дата 2014/05/01)

Таким образом, если пользователь1 и пользователь 2 имеют один и тот же продукт за ту же дату, мне нужна проверка, чтобы отделить количество для каждого продукта по идентификатору пользователя и DATE, что является большой проблемой.


Фактически Im, использующий MVC, таким образом, это лучший способ отправить с json и ajax в определенную модель (для modelstate.isvalid). Таким образом, этот код "проверен" с теми вещами, которые мне нужны для правильных данных в базе данных. Надеюсь, кто-то может мне помочь.

заранее спасибо

Теги:
arrays
asp.net-mvc

1 ответ

1
Лучший ответ

Когда вы вставляете новый товар в корзину, вам нужно сравнить его свойства с объектами в корзине, и если идентификатор продукта, идентификатор пользователя и дата совпадают, то вы хотите добавить новое количество в старое количество старого объекта в массиве вместо того, чтобы нажимать новый. В качестве альтернативы вы можете отправить процесс массива корзины после добавления элемента и слияния дубликатов при добавлении их количества. Я не уверен, какой метод лучше.

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 );
  }
}
  • 0
    Большое спасибо! Это то, что мне было трудно сравнивать с существующими массивами и не добавлять со всеми этими проверками, это прекрасно работает! Еще раз спасибо!
  • 0
    это только помогло мне .. спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню