Как рассчитать и изменить конкретное c значение внутри моего локального хранилища js - PullRequest
0 голосов
/ 14 июля 2020

У меня есть код, в котором я могу добавлять, отображать и удалять объекты в локальном хранилище и его работу, но всякий раз, когда я пытаюсь обновить конкретный объект, вместо этого он отменяет все, а не просто изменяет конкретный, который я хочу

МОЙ КОД

$(".qty-val-ls").on("change", function() {
    let record = localStorage.getItem("guestCart");
    let index = $(this).attr("id");
    if(record == null)
    {
        recordObj = [];
    }else{
        recordObj = JSON.parse(record);
    }
    recordObj[index].price = $(this).val() * parseInt(recordObj[index].price);
    
    localStorage.setItem('guestCart', recordObj[index].price); 
})

МОЙ ВХОД

 <input type="number" class="qty-val-ls" min="1" id="${index}" value="4000" onChange="">

$ {index} здесь - это идентификатор, который находится в локальном хранилище, а index в jquery - это номер, в котором объект похож на в localstorage, он начинается с 0, 1, 2 и т. д. c

МОЙ МАССИВ (ОБЪЕКТ В ЛОКАЛЬНОМ ХРАНИЛИЩЕ)

[{"id":"11","name":"Rts 512GB USB Flash Drive Pendrive Memory USB 3.0","price":"3000","img":"newusb.png","qty":1},
{"id":"10","name":"MP3 Music Player Audio Player -Black","price":"5000","img":"mp3.png","qty":1},
{"id":"5","name":"Blue Louis Vuitton Women Bag","price":"10000","img":"newbag.png","qty":1},
{"id":"1","name":"Samsung Galaxy S9 6gb ram, 32gb rom, 16mpbs","price":"100000","img":"newphone.png","qty":1}]

Итак, пожалуйста, как мне изменить значение после расчета и вернуть его туда, где оно должно быть

РЕДАКТИРОВАТЬ: Я проверил другие похожие вопросы по stackoverflow, но, похоже, ни один из них не работает

1 Ответ

0 голосов
/ 14 июля 2020

Я постараюсь объяснить, что тоже было сказано в комментариях, и дать хороший подход. Прежде всего, вы переопределяли сохраненный объект в localStorage с помощью recordObj[index].price вместо полного recordObj. Но, как вы заявили, сохранение recordObj с последующим получением его значения дает "[object Object]", потому что оно анализируется в строку. Принимая во внимание то, что я сказал о том, чтобы быть осторожным при доступе к свойству items, потому что оно еще не могло существовать, этот код должен работать на вас:

$('.qty-val-ls').on('change', function onChange() {
    const record = localStorage.getItem('guestCart');
    const recordObj = record ? JSON.parse(record) : [];
    const index = $(this).attr('id');
    if (recordObj[index]) {
        recordObj[index].price = $(this).val() * parseInt(recordObj[index].price, 10);
    }
    localStorage.setItem('guestCart', JSON.stringify(recordObj)); 
});

Более подробно объясняя, что я сделал:

  1. Получить элемент localStorage.
  2. Разобрать его с помощью JSON.parse, если он существует, потому что он преобразован в строку; если он не существует, инициализируйте его как пустой массив.
  3. Если существует элемент с заданным индексом, установите желаемую цену. Я также добавил параметр radix к parseInt, так как это хорошая практика, и я привык следовать этому правилу ESLint (https://eslint.org/docs/rules/radix)
  4. Наконец, сохраните измененный (или нет) и строковый массив.
...