Как посчитать конкретные идентификаторы в localStorage? - PullRequest
1 голос
/ 10 октября 2019

Я пишу пользовательскую корзину для своего портфолио проекта. Я хочу сохранить идентификаторы продуктов, а также подсчитать, сколько конкретных идентификаторов находится в моем хранилище. Я хочу, чтобы мои данные выглядели так:

[
  {id: '64783', count: '5'},
  {id: '111', count: '50'},
]

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

export const addToCart = (id, userIsLoggedIn) => {
    let cart = [];
    let itemToAdd = {
        id,
        count: 0,
    };
    if (localStorage.getItem('cart')){
        cart = JSON.parse(localStorage.getItem('cart'));
        let count = cart.filter(el => el.id === id).length
        console.log(count)
    }
    cart.push(itemToAdd);
    localStorage.setItem('cart', JSON.stringify(cart))
    console.log(localStorage.getItem('cart'))
};

Я могу получить значениесчитайте правильно, но моя функция все еще добавляет весь объект вместо обновления счетчика элемента.

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 10 октября 2019

Этот код будет

  1. читать cart из localStorage
  2. проверки, существует ли идентификатор в корзине
  3. , если он есть, увеличиватьcount
  4. в противном случае добавьте элемент со счетом: 1
  5. , если localStorage пуст, он создает весь объект

Итак, код

export const addToCart = (id, userIsLoggedIn) => {
    let cart = [];
    let itemToAdd = {
        id,
        count: 1,
    };
    if (localStorage.getItem('cart')) {
        cart = JSON.parse(localStorage.getItem('cart'));
        let item = cart.find(el => el.id === id);
        if (!item) {
            cart.push(itemToAdd);
        } else {
            item.count ++;
        }
    } else {
        cart = [itemToAdd];
    } 
    localStorage.setItem('cart', JSON.stringify(cart))
    console.log(localStorage.getItem('cart'))
};

В качестве альтернативы

export const addToCart = (id, userIsLoggedIn) => {
    let cart = {};
    if (localStorage.getItem('cart')) {
        cart = JSON.parse(localStorage.getItem('cart'));
    }
    cart[id] = (cart[id] || 0) + 1;
    localStorage.setItem('cart', JSON.stringify(cart));
    console.log(localStorage.getItem('cart'));
};

При этом методе содержимое корзины выглядит как

{
    "1111": 2,
    "1234": 1
}

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...