#json #local-storage #key-value
#json #локальное хранилище #ключ-значение
Вопрос:
Я создаю корзину услуг на стороне клиента, где услуги сгруппированы внутри 3-х уровней группировок, таких как
product[SECTION] [SERVICE] [ITEM] product['carpet']['cleaning']['room'] = {'qty':2,'price':15}; product['carpet']['cleaning']['hall'] = {'qty':1,'price':10}; product['carpet']['protecting']['hall'] = {'qty':1,'price':10}; product['carpet']['deodorize']['hall'] = {'qty':1,'price':10}; product['leather']['cleaning']['sofa'] = {'qty':1,'price':10};
хотите сгенерировать вышеуказанную структуру json.
мои текстовые поля выглядят так, как показано ниже, data-section
data-service
data-tem
и data-price
lt;input type="text" class="form-control input-number" data-price="15" data-section="carpet" data-item="room" data-service="protect" /gt;
Мой код JS выглядит так, как показано ниже, но он добавляет только текущий элемент, перезаписывая все остальные службы и разделы.
$(function(){ $('.input-number').change(function(){ var section = $(this).attr('data-section'); var item = $(this).attr('data-item'); var service = $(this).attr('data-service'); var qty = $(this).val(); var unitprice = $(this).attr('data-unitprice'); addProduct(section,item,service,qty,unitprice); }); }); function addProduct(section,item,service,qty,unitprice){ let products = {}; if(localStorage.getItem('products')){ products = JSON.parse(localStorage.getItem('products')); } products['"' section '"'] = { ['"' service '"'] : { ['"' item '"'] : { 'unitprice' : unitprice, 'qty': qty } } }; localStorage.setItem('products', JSON.stringify(products)); }
Как я могу добавлять только вместо перезаписи вложенных элементов?
ОТРЕДАКТИРОВАНО Я отредактировал свою функцию добавления продукта, как показано ниже, но все еще не получил желаемого результата
function addProduct(section,item,service,qty,unitprice){ let products = {}; if(localStorage.getItem('products')){ products = JSON.parse(localStorage.getItem('products')); } var v = { [service] : { [item] :{ "qty":qty,'unitprice':unitprice } } }; products.push( section, v ); localStorage.setItem('products', JSON.stringify(products)); } Object.prototype.push = function( key, value ){ if(typeof value === 'object'){ var k = Object.keys(value)[0]; value.push( k, value[k] ); } this[ key ] = value; return this; }
Ответ №1:
Во-первых, это не очень хороший способ хранения ваших данных.
Вот лучший способ хранения ваших данных. Это гораздо проще понять, если вы видите это как объект, потому что в javascript это одно и то же
//example this 2 data is store the same way in javascript var product['carpet']['cleaning']['room'] = {'qty':2,'price':15}; var product = [{ carpet: { cleaning: { room: {'qty':2,'price':15} } } }] // my solution would be just save section, service and item in the object, example: var product = []; var v = { section: 'carpet', service: 'cleaning', item: 'room' qty:2, price:15 } product.push(v)