2017-02-16 2 views
0

Чувствуя, как обновить массив obj в localStorage, когда элемент уже существует, мой localStorage создает новый массив после обновления, а не обновления или добавления нового объекта obj.Как обновить массив obj в localStorage, если элемент уже существует

LocalStorage OBJ - функция

cart - [{"Product":"Coke","Price":"1.99","Quantity":"1x "}] 

AddToCart где я добавляю я нажимаю объект array[]

var itemStorage = []; 
for (var key in drinkCounter) { 
... 

     var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' } 
     itemStorage.push(cartObj); 
     localStorage.setItem('cart', JSON.stringify(itemStorage)); 
... 

    } 

Вот JSfiddle, так как только вы добавили пункт и обновите страницу и добавьте тот же или новый элемент воссоздает localStorage, как я могу обновить его, а не воссоздавать новый каждый раз, когда вы обновляете страницу?

Edit - если вы добавили один и тот же предмет он должен обновить {Quantity:}

После ответа ниже, я попытался обновить пункт количество существующего пункта, однако, что не работает. Любое предложение?

cartItems.forEach(function (item, i) { 
      if (item.Product == key) { 
       item.Quantity = drinkCounter[key].count; 
       // item.Quantity += 1; // or no avail 
       index = i; 
      } 
     }); 

подсчитывать количество Fixed LocalStorage

if (index !== -1) { 
    cartItems[index].Quantity = parseInt(cartItems[index].Quantity) + 1 + 'x'; 
} else { 
    var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' } 
    cartItems.push(cartObj); 
} 

** Edit - ** Быстрый вопрос о полной стоимости, может кто-то указать, почему, когда я добавляю предмета у totalPrice является 0, когда оно должно быть цена товара

+0

'sessionStorage' будет удален после перезагрузки страницы! Я думаю, что я хотел использовать 'localStorage'! –

+0

Извините, я изменил его в своем коде, забыл изменить его здесь. но да, это должно быть «localStorage». Но проблема также существует с использованием 'localStorage' – MrNew

ответ

2

Вы не можете избежать стягивания данных локального хранилища.

var data = JSON.parse(localStorage.getItem('cart')); 
for (var key in drinkCounter) { 
...  

    // search for a product with current key 
    var index = -1; 
    data.forEach(function(item, i){ 
     if(item.Product === key) { 
      index = i; 
     } 
    }); 

    if (index !== -1) { 
     // data[index] = cartObj; 
     data[index].Quantity = parseInt(data[index].Quantity.split(x)[0]) + drinkCounter[key].count + 'x '; 
    } else { 
     var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' }; 
     data.push(cartObj); 
    } 
... 
} 

localStorage.setItem('cart', JSON.stringify(data)); 
+0

, но как вы можете обновить количество того же элемента, который вы добавили после обновления страницы? – MrNew

+0

попытался добавить 'item.Quantity = drinkCounter [key] .count;' в 'if()' условия, но это не сработало – MrNew

+0

'var data = JSON.parse (localStorage.getItem ('cart')) || []; 'в случае, если' cart' еще не установлен! –

Смежные вопросы