【问题标题】:How to calculate and change a specific value inside my localstorage js如何计算和更改我的本地存储 js 中的特定值
【发布时间】:2020-11-04 04:27:06
【问题描述】:

我有一个代码,我可以在其中本地存储添加、显示和删除对象及其工作,但每当我尝试更新特定对象,它会覆盖所有内容,而不仅仅是更改我想要的特定对象

我的代码

$(".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}是本地存储中的id,jquery中的index是对象在本地存储中的编号,它从 0、1、2 等开始

我的阵列(本地存储中的对象)

[{"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 的其他类似问题,但似乎没有一个有效

【问题讨论】:

  • Do localStorage.setItem('guestCart', recordOb); 而不是 localStorage.setItem('guestCart', recordObj[index].price);
  • 还要小心设置价格值的行,因为当您将recordObj 初始化为空数组时,recordObj[index].price = ... 会抛出错误
  • @Ravi 它返回 [object Object]:"[object Object]"
  • @VirgilioGM 那么我该如何设置呢

标签: javascript jquery arrays object local-storage


【解决方案1】:

我将尝试解释 cmets 中的内容并给出一个好的方法。首先,您使用recordObj[index].price 而不是完整的recordObj 覆盖localStorage 中的存储对象。但是,正如您所说,存储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. 最后,存储修改(或未修改)和字符串化的数组。

【讨论】:

  • 在 const recordObj guestCart 中没有定义,因为它是本地存储中的一个键
  • 所以我将guestCart更改为记录,非常感谢您
  • 就是这样,对不起,这是一个错误。我编辑了答案以修复它
猜你喜欢
  • 2014-06-05
  • 2010-11-18
  • 2017-07-02
  • 2021-03-02
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多