如何使用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
很高兴知道,我会用这种方式在一个键中定位一个键:)不客气。我必须亲自尝试,所以我也很高兴知道。