Допустим у меня в localstorage есть некие данные по ключу testObject
:
[{"some_obj":{"count":"1111","total_price":"112"}}]
У меня есть такой объект:
myObj = { "1111": {"count" : "12", "total_price": "23232"}}
Сохраняю его в localstorage:
var oldItems = JSON.parse(localStorage.getItem('testObject')) || [];
oldItems.push(myObj );
localStorage.setItem('testObject', JSON.stringify(oldItems));
Он добавляется.
Но, допустим у меня есть другой объект:
myObj2 = { "1111": {"count" : "128", "total_price": "11111"}}
Как сделать так, чтобы был заменен уже существующий объект в массиве localstorage?
Т.е. чтобы на выходе в localstorage было:
[
{"some_obj":{"count":"1111","total_price":"112"}},
{"1111":{"count":"12","total_price":"23232"}}
]
А не:
[
{"some_obj":{"count":"1111","total_price":"112"}},
{ "1111": {"count" : "12", "total_price": "23232"}},
{"1111":{"count":"12","total_price":"23232"}}
]
UPDATE: Решил все-таки вместо массива хранить так:
{
"9775":{"total_price":"296.40","total_count":"6","items":["643368"]},
"9776":{"total_price":"0.00","total_count":"0","items":["643370"]}
}
Возник еще такой вопрос, как правильно запихнуть туда массив items
? Сейчас делаю так:
var oldItems = JSON.parse(sessionStorage.getItem("totalObj")) || {};
var t = oldItems[sectionId] = {};
t['total_price'] = $("#total_sum").text();
t['total_count'] = $("#total_count").text();
var items = t['items'] || [];
t['items'] = items;
t['items'].push(tr.attr("id"))
sessionStorage.setItem("totalObj", JSON.stringify(oldItems));
Но в таком случае, он не добавляет элемент в массив, а перезатирает предыдущие элементы.
При данной структуре данных может сработать что-то такое:
var oldItems = JSON.parse(localStorage.getItem('testObject')) || [];
var newItem = { "1111": {"count" : "128", "total_price": "11111"}};
var isReplaced = false;
var newItemKey = Object.keys(newItem)[0]; // id нового товара
for(var i = 0; i < oldItems.length; i++) {
var oldItemKey = Object.keys(oldItems[i])[0];
if(oldItemKey == newItemKey) {
// новый товар уже есть в списке товаров - заменяем
oldItems[i] = newItem;
isReplaced = true;
break;
}
}
if(!isReplaced) {
// нового товара не было в списке - добавляем
oldItems.push(newItem);
}
localStorage.setItem('testObject', JSON.stringify(oldItems));
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеНужно сделать в Brackets, что бы тег перемещался через строчку, а писать можно было сразу между тегами с пробелами или табуляцией