如何使用Javascript和/或Jquery删除本地存储中对象内的密钥?

如何使用Javascript和/或Jquery删除本地存储中对象内的密钥?,javascript,jquery,json,local-storage,Javascript,Jquery,Json,Local Storage,在本地存储中,我有一个名为“收藏夹”的对象,它包含这个 "{ "id3333":{ "URL":"somewhere.comm/page1/", "TITLE":"Page 1 Title", }, "id4444":{ "URL":"somewhere.comm/page2/", "TITLE":"Page 2 Title", } }" 如何根据对象ID(例如id3333和id4444)删除对象

在本地存储中,我有一个名为“收藏夹”的对象,它包含这个

"{
    "id3333":{
        "URL":"somewhere.comm/page1/",
        "TITLE":"Page 1 Title",
    },
    "id4444":{
        "URL":"somewhere.comm/page2/",
        "TITLE":"Page 2 Title",
    }
}"
如何根据对象ID(例如id3333和id4444)删除对象

我已经试过以下方法和其他巫术

localStorage.removeItem('id3333'); // no errors, no removal
localStorage.removeItem('favourites':'id3333'); // SyntaxError: missing ) after argument list
localStorage.removeItem('favourites[id3333]'); // no errors, no removal
localStorage.removeItem('id3333', JSON.stringify('id3333')); // no errors, no removal
同样,我需要根据变量获取要删除的键名,如下所示

var postID = 'id3333';
localStorage.removeItem(postID);

是否可以直接删除嵌套项,或者是否需要检索完整对象,然后删除该项,然后再次将该对象设置回本地存储

到目前为止,我最接近直接删除任何内容的方法是

localStorage.removeItem('favourites');

但这当然会删除整个对象。

您只有一个键,而您的行为就像有多个键一样

var obj = {
    "id3333":{
        "URL":"somewhere.comm/page1/",
        "TITLE":"Page 1 Title",
    },
    "id4444":{
        "URL":"somewhere.comm/page2/",
        "TITLE":"Page 2 Title",
    }
};

window.localStorage.favs = JSON.stringify(obj);  //store object to local storage
console.log("before : ", window.localStorage.favs);  //display it
var favs = JSON.parse(window.localStorage.favs || {});  //read and convert to object
var delKey = "id3333";  //key to remove
if (favs[delKey]) {  //check if key exists
    delete favs[delKey];  //remove the key from object
}
window.localStorage.favs = JSON.stringify(favs);  //save it back
console.log("after : ", window.localStorage.favs);  //display object with item removed

使用
localStorage.removietem
只能删除顶级密钥,即直接在
localStorage
上删除密钥

因为
id3333
处于
localStorage.favorites
状态,所以不能使用
localStorage.removietem
将其删除


相反,尝试
删除localStorage.favorities['id3333']
简单,实际上:您只需
删除它。:)


delete
完成您要查找的操作。如果您愿意的话,您也可以执行类似于
删除x.id3333.TITLE的操作。还请注意,
delete
如果成功,则返回
true
;如果不成功,则返回
false

假设您在localStorage中设置了一个嵌套对象,如下所示

const dataObj = {
    uid: {
        name: 'robin',
        age: 24,
    }

} 

window.localStorage.setItem('users', JSON.stringify(dataObj));
const existingLocalStorage = JSON.parse(window.localStorage.getItem('users') || {});
if(existingLocalStorage['uid']['age']) { // if throws any error, use lodash get fucntion for getting value
    delete existingLocalStorage['uid']['age'];
}
window.localStorage.setItem('users', JSON.stringify(existingLocalStorage));
现在要删除
age
属性。您不能使用
removietem
native函数删除它,因为它允许从顶层删除

因此,您需要首先获取数据并删除所需的属性,然后使用更新后的值将数据再次设置为localStorage,如下所示

const dataObj = {
    uid: {
        name: 'robin',
        age: 24,
    }

} 

window.localStorage.setItem('users', JSON.stringify(dataObj));
const existingLocalStorage = JSON.parse(window.localStorage.getItem('users') || {});
if(existingLocalStorage['uid']['age']) { // if throws any error, use lodash get fucntion for getting value
    delete existingLocalStorage['uid']['age'];
}
window.localStorage.setItem('users', JSON.stringify(existingLocalStorage));

只能在
localStorage
中存储字符串,不能存储对象。因此,您唯一的选择是将整个字符串加载到内存中,对其进行操作,然后将其保存回去。正如@epascarello所展示的,JSON方法可以很好地实现这一点。有什么理由检查密钥是否存在吗?如果不是,则不会抛出错误。这只是个人喜好。谢谢。你回答了我的“我是否需要检索完整对象”,向我展示了如何将一个键作为删除的目标,并将该键的名称基于一个变量。我的术语很糟糕。id3333是密钥,URL是该密钥中的密钥吗?@Hastingzusammenstellen是的。一个键/值对的值可以有另一个键/值对。你可以把里面的称为“子键”。嗨,鲍勃,谢谢你的回复
delete x.id3333.TITLE
很高兴知道,我会用这种方式在一个键中定位一个键:)不客气。我必须亲自尝试,所以我也很高兴知道。