【问题标题】:I want to delete specific object from localstorage我想从本地存储中删除特定对象
【发布时间】:2021-02-04 01:33:31
【问题描述】:

通常有一个函数 localstorage.remove(key)。但我想删除键中的索引。 我正在这样保存对象:

cart[idstr] = [qty, name];

localStorage.setItem('cart', JSON.stringify(cart));

我想删除一个特定的cart[idstr] 示例console.log(cart) 提供:

{pr22: Array(2), pr19: Array(2), pr21: Array(2)}

假设我想删除 pr19。我该怎么办?

【问题讨论】:

标签: javascript arrays json object local-storage


【解决方案1】:

您需要反序列化、修改并重新保存该项目。

请记住,localStoragestrings 的简单键/值存储:它不提供任何方式来操作这些存储字符串的内容(您甚至不需要存储 JSON,您可以存储 YAML, localStorage 中的 XML 或 Base64 编码的任意二进制数据。

像这样:

function storeCart( cart ) {
    
    localStorage.setItem( 'cart', JSON.stringify( cart ) );
}

/** Returns 'true' if the specified key/value was removed from the stored cart object - otherwise 'false'. */
function deleteItemFromStoredCart( key ) {
    
    const cartString = localStorage.getItem( 'cart' );
    if( !cartString ) return false;
    
    try {
        const cart = JSON.parse( cartString );
        if( !( key in cart ) ) return false;

        delete cart[ key ];
        storeCart( cart );
        return true;
    }
    catch( err ) {
        console.log( "Error: ", err );
        return false;
    }
}

【讨论】:

    【解决方案2】:

    我建议获取数据,删除对象,然后重置它。

    var cart = localStorage.getItem('cart');
    cart = cart ? JSON.parse(cart) : {};
    delete cart['pr19'];
    localStorage.setItem('cart', JSON.stringify(cart));
    

    【讨论】:

      【解决方案3】:

      不能直接做。

        • 首先您必须从存储中获取已保存的项目
        • 删除此项目所需的属性
        • 更新存储中的项目
      let cart= JSON.parse( localStorage.getItem('cart') );
      delete cart.pr19;
      localStorage.setItem('cart', JSON.stringify( cart ) );
      
      

      【讨论】:

        【解决方案4】:

        尝试将购物车对象保存为临时变量,从本地存储中删除购物车,然后从临时中删除索引并将其重新添加到本地存储中。 即:

        var temp = localStorage.getItem('cart')
        localStorage.removeItem('cart')
        delete temp[idstr]
        localStorage.setItem('cart', temp)
        

        【讨论】:

        • 如果templocalStorage 中不存在,则此代码将失败,运行时Error - 对localStorage.setItem 的调用也会失败,因为您传递的是object,而不是string.
        【解决方案5】:

        对于 localstorage 中的设置值: 只有一个字段直接写=>localStorage.setItem('id',2); 对于对象直接写 => localStorage.setItem('object',JSON.stringify(object));

        从本地存储中获取价值: 只有一个字段直接写=>localStorage.getItem('id'); 对于对象直接写 => JSON.parse(localStorage.getItem("object"))

        用于删除本地存储中的值:=> localStorage.removeItem('id');

        【讨论】:

          【解决方案6】:

          试试这个

          delete localStorage.cart[idstr]
          

          【讨论】:

          • 这段代码根本不起作用:localStorageStorage 类型的对象,它没有隐式属性(正如我在回答中解释的那样,localStorage 只存储 @987654325 @ 值,而不是 object 值,因此您必须反序列化和重新序列化对象)。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-21
          • 2018-11-07
          • 2013-11-25
          相关资源
          最近更新 更多