Добавление элементов с одинаковыми идентификаторами в локальное хранилище - PullRequest
0 голосов
/ 28 февраля 2019

Я работаю над созданием опции добавления в корзину в локальном хранилище для отправки в нашу ESP для отказа от корзины.У меня есть товары, добавленные в корзину для хранения в Local Storage под ключом: cart.Корзина создает массив, и каждый раз, когда продукт добавляется, новый объект вставляется в массив.Теперь я пытаюсь выяснить, когда снова добавляется элемент с тем же номером, как заставить его обновить уже существующий объект вместо вставки другого объекта в массив.

// Try to retreive the count of shopping cart items from localStorage
var cartCounter = localStorage.getItem('cartCounter');

if (cartCounter != null) {
  // We already have at least one item in localStorage so increment the counter
  cartCounter = parseInt(cartCounter) + 1
}
else {
  // No items in localStorage so initialize the counter
  cartCounter = 1;
}

// Get the data layer push
var pr = {{DL - Add To Cart}};

// Store product sku, name, and price in localStorage
// Using string format product[cartCounter]attribute for the key
localStorage.setItem('product' + cartCounter + 'sku', pr.fullProductSKU);
localStorage.setItem('product' + cartCounter + 'name', pr.name);
localStorage.setItem('product' + cartCounter + 'price', pr.price);
localStorage.setItem('product' + cartCounter + 'quantity', pr.quantity);

var addItem = function (sku, qty, price) {
    var oldItems = JSON.parse(localStorage.getItem('cart')) || [];        
    var newItem = {
        'product-sku': sku,
        'product-qty': qty,
        'product-price': price
    };        
    oldItems.push(newItem);        
    localStorage.setItem('cart', JSON.stringify(oldItems));
};

console.log(JSON.parse(localStorage.getItem('cart')));
addItem(pr.fullProductSKU, pr.quantity, pr.price);

Вот вывод, который я получаю, но он великолепен, но первые два элемента имеют одинаковый SKU, поэтому я хочу, чтобы объект был объединен в 1 объект с qty, показывающим 2, и обновленной ценой.

[{product-sku: "965000070", product-qty: 1, product-price: 40.99}
 {product-sku: "965000070", product-qty: 1, product-price: 40.99}
 {product-sku: "965000244", product-qty: 1, product-price: 48.99}]

Вот что я хотел бы получить:

[{product-sku: "965000070", product-qty: 2, product-price: 81.98}
 {product-sku: "965000244", product-qty: 1, product-price: 48.99}]

1 Ответ

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

Вы можете просто посмотреть в массиве, извлеченном из cart, и проверить, включен ли продукт, а затем обновить количество.Например, find может использоваться для этого поиска:

var addItem = function (sku, qty, price) {
    var oldItems = JSON.parse(localStorage.getItem('cart')) || [];
    var match = oldItems.find(function (item) {
        return item['product-sku'] === sku;
    });
    if (match) {
        match['product-qty'] += qty;
        match['product-price'] += price;
    } else {
        var newItem = {
            'product-sku': sku,
            'product-qty': qty,
            'product-price': price
        };
        oldItems.push(newItem);
    }
    localStorage.setItem('cart', JSON.stringify(oldItems));
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...