Как получить доступ к определенному элементу в localStorage? - PullRequest
0 голосов
/ 21 февраля 2019

Я делаю торговый сайт.У меня есть список продуктов с уникальным идентификатором, различными спецификациями и количеством.У меня есть JSON , который выглядит примерно так:

{    
            "ProductId" : "1",
            "ProductCode" : "",
            "ProductName" : "XYZ",
            "Specifications" : {
                "Size" : ["S","M","L","XL","XXL"],
                "GrossWeight" : "200gm each",
                "Colour" : ["Beige"]
            },
            "SellingPrice" : 80,
            "MinimumOrderQuantity" : "1",
            "MaximumOrderQuantity" : "1",
            "ShippingCharges" : "75",
            }

Есть некоторые продукты с Количество не более 1. Если пользователь добавляет продукт, который имееттолько 1 Количество в моей таблице, я хочу, чтобы пользователь не мог добавить тот же товар снова, если он уже существует в корзине.Я использую localStorage для сохранения продукта по нажатию кнопки.

Это мой код:

if(localStorage.getItem("productTable") != null)
   {
      productTable = JSON.parse(localStorage["productTable"]);
      for(var x in productTable) {
          serialNumber++; 
   }
    productTable[serialNumber]={
            serialNumber: serialNumber, 
            ProductId : Id, 
            Colour : selectedColour, 
            Size : selectedSize, 
            QuantityAdded : selectedQuantity
          };
      }
     else {
            productTable[serialNumber]={
            serialNumber: serialNumber, 
            ProductId : Id, 
            Colour : selectedColour, 
            Size : selectedSize, 
            QuantityAdded : selectedQuantity
          };
      }

ОБНОВЛЕНИЕ: Я использую LocalStorageкоторый выглядит следующим образом, когда я добавляю товар:

{serialNumber: 1, ProductId: "5", Colour: "Grey", Size: "N/A", QuantityAdded: "1"}

Я могу добавить товар в корзину.Как я могу остановить пользователя от добавления того же продукта снова?

Ответы [ 4 ]

0 голосов
/ 21 февраля 2019

Я предполагаю, что serialNumber - это число продуктов определенного Id

const data = [{
  "ProductId": "1",
  "ProductCode": "",
  "ProductName": "XYZ",
  "Specifications": {
    "Size": ["S", "M", "L", "XL", "XXL"],
    "GrossWeight": "200gm each",
    "Colour": ["Beige"]
  },
  "SellingPrice": 80,
  "MinimumOrderQuantity": "1",
  "MaximumOrderQuantity": "1",
  "ShippingCharges": "75",
}];
const newProduct = {"ProductId": 1, MaximumOrderQuantity: 1};

const products = data.filter(({ProductId})=>ProductId===newProduct.ProductId);

if(newProduct.MaximumOrderQuantity >= products.length){
  //can't add product because already a maximum amount exists
  console.log("Maximum quantity already attained");
} else {
  data.push(newProduct);
}

const res = JSON.stringify(data);

console.log(res);
0 голосов
/ 21 февраля 2019
   if (localStorage.getItem("productTable") != null) {
      productTable = JSON.parse(localStorage["productTable"]);
      for (var x in productTable) {
          serialNumber++; 
      }
      if (selectedQuantity >= 1 && productTable[serialNumber].MaximumOrderQuantity == 1) {
        alert("Please don't add more than one of these items");
        return;
      }
    }

    productTable[serialNumber] = {
      serialNumber: serialNumber, 
      ProductId: Id, 
      Colour: selectedColour, 
      Size: selectedSize, 
      QuantityAdded: selectedQuantity
    };
0 голосов
/ 21 февраля 2019

Проблема здесь в том, что вы устанавливаете продукты на своей карте на основе возрастающего значения serial number, так как вы используете серийный номер, который может отличаться для тех же продуктов, что и ключ, у вас есть только один вариант, чтобы определить,продукт уже добавлен на вашу карту, и он проходит по всем значениям в productTable, проверяет идентификатор продукта и проверяет его перед добавлением в таблицу.assuming productTable is a map:

productTable.forEach((productItem: Product, key: any) => {
    if(productItem.Id === Id){
    //this product is already there check for maximum quantity
    if(productItem.MaximumQuantity <= 1){
    //there is just 1 possible item so don't add it
    }else{
      // there is still space to add then proceed with adding the product
    }
});
0 голосов
/ 21 февраля 2019
let product = {product_id: 1, ....}
// make an entry in local storage using product id which will be unique
// so in any case if local storage has product id as key available, do 
// not add 
if (product.quantity > 1 || !localStorage.getItem(product.product_id)) 
{
    localStorage.setItem[product.product_id] = product;
}else {
    // update login
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...