Проблема с количеством товаров в корзине при занесении её в local storage [дубликат]

230
19 октября 2021, 15:50
На этот вопрос уже дан ответ здесь:
В условном операторе выполняются обе ветки // поиск по массиву не работает (1 ответ)
Закрыт 1 год назад.

написал функцию которая принимает id нового товара и заносит её в корзину которая лежит в local srorage. Когда кликаешь по одному товару то всё работает как нужно, увеличивается counter и все ок. НО когда добавляешь ещё один товар то вместе с увеличение count добавляется ещё один товар. Не могу понять с чем связано уже голову сломал. Код

// Получаем данные из LocalStorage 
function getCartData() { 
    return JSON.parse(localStorage.getItem('cart')); 
} 
// Записываем данные в LocalStorage 
function setCartData(o) { 
    localStorage.setItem('cart', JSON.stringify(o)); 
   
} 
 
 
// Добавляем товар в корзину 
function addItemToBag(newItem) { 
 
    var cartData = getCartData() || []; // получаем данные корзины или создаём новый объект, если данных еще нет 
   
      if(cartData.length==0){ // если в массиве ничего не лежит создаем нулевой элемент 
         cartData.push({ 
                    id: newItem, 
                    count: 1 
                }); 
         }else{ 
     
          for (let i = 0; i < cartData.length; i++) { //цикл в котором проверяем не лежит ли уже товар с таким id корзине 
             
            if (cartData[i].id === newItem) { // если лежит то увеличиваем count 
               
                   cartData[i].count+=1; 
            } else { //если нет то добавляем новый 
                
                cartData.push({ 
                    id: newItem, 
                    count: 1 
                }); 
            } 
        } 
         } 
 
    setCartData(cartData)  // Обновляем данные в LocalStorage 
}

Скрин что выводит в local storage

Answer 1

var cartData = getCartData() || []; 
var oldItem = null; 
 
for (let i = 0; i < cartData.length; i++) { 
  if (cartData[i].id === newItem) { 
    oldItem = cartData[i]; 
    break; 
  } 
} 
 
if (oldItem) { 
  oldItem.count = oldItem.count + 1; 
} else { 
  cartData.push({ 
    id: newItem, 
    count: 1 
  }); 
} 
 
setCartData(cartData);

READ ALSO
Вызвать обновление двух компонентов из одного без Redux

Вызвать обновление двух компонентов из одного без Redux

Есть четыре компонента: Post, PostMaker, CommentSection и CommentFormPost включает в себя как раз вызов всех трех

140
Angular ошибка ERROR TypeError: is undefined

Angular ошибка ERROR TypeError: is undefined

ЗдраствуйтеПытаюсь сделать обработчик который будет создавать масив разделов в зависимости от того есть ли для него ресурсы или нет

221
This в безымянном объекте возвращает undefined

This в безымянном объекте возвращает undefined

в js объекте без имени есть свойстваКак сделать так что бы одно свойство зависело от другого

77
по событию ng-click сделать имитацию клика на tab

по событию ng-click сделать имитацию клика на tab

Имеется headerphp в котором 5 табов

161