如何从具有多个值的 localstorage 中的键中删除一个值?
How to remove one value from a key in localstorage that has many values?
我以前看过这个问题,但解决方案对我没有帮助,所以我又问了一遍。
目前,我正在将值存储到一个数组中,并且该数组正在存储到本地存储中。
这是对象
data.items -
0: {id: 190217270, node_id: 'MDEwOlJlcG9zaXRvcnkxOTAyMTcyNzA=', name: '3-Bit-CNC-Starter-Pack'}
1: {id: 187179414, node_id: 'MDEwOlJlcG9zaXRvcnkxODcxNzk0MTQ=', name: 'inb-go}
我已经通过这个映射并使用 'name' 作为值。我使用这个函数通过按钮调用这个值
const favs = [];
function checkId(e) {
if (e.target.value !== ""){
if (!favs.includes(e.target.value)){
favs.push(e.target.value);
localStorage.setItem("name", JSON.stringify(favs));
console.log(favs);
document.getElementById("favsarray").innerHTML = favs;
}
}
}
并从本地存储中删除值我正在使用这个函数。
function removeId(e, value) {
if (e.target.value !== "") {
favs.pop(e.target.value);
console.log(favs);
document.getElementById("favsarray").innerHTML = favs;
const stored = JSON.parse(localStorage.getItem("name"));
delete stored[value, e.target.value];
localStorage.setItem("name", JSON.stringify(stored));
console.log(stored);
}
}
虽然该值正在从数组中删除,但并未从本地存储中删除。
旁注 - 我使用单独的按钮调用此函数。
控制台日志
array (item is gone)
[]
localstorage (the value is still there)
[
"Spiral-Up-Cut-Router-Bit"
]
但是如果我 select 将另一个项目添加到 localstorage,那么之前的项目将被删除。
UNFAVORITE - FUNCTION REMOVEid
[
"Spiral-Up-Cut-Router-Bit"
]
NEW FAVORITE - FUNCTION NEWId
[
"graphqless"
]
我希望这是有道理的,我试着尽可能地添加细节。
尝试使用localStorage.removeItem方法从存储中移除项目:
function removeId(e, value) {
if (e.target.value !== "") {
favs.pop();
// other code here
localStorage.removeItem('name'); // method to remove item from storage
}
}
更新:
如果从数组中删除了一个项目并且我们想将这个更新后的值设置为 localstorage,那么我们可以只更新这个值:
function removeId(e, value) {
if (e.target.value !== "") {
favs.pop();
console.log(favs);
document.getElementById("favsarray").innerHTML = favs;
const stored = JSON.parse(localStorage.getItem("name"));
delete stored[value, e.target.value]; // this code looks very fishy - charlietfl
localStorage.setItem("name", JSON.stringify(favs));
console.log(stored);
}
}
最简单的方法是直接覆盖 localStorage 中的项目。从 favs
数组中删除项目后,再次调用 localStorage.setItem("name", JSON.stringify(favs));
就完成了。
我不确定这是否对您有帮助,但无论如何我都会分享。
我不明白上面提到的这部分代码:
delete stored[value, e.target.value];
您在 值和 e.target.value 中传递了什么?如果它是名称 ("Spiral-Up-Cut-Router-Bit") 本身,则删除不会从数组中删除该值。通常,当你在 JS 数组上使用 delete 运算符时,你需要传递值的索引,而不是值本身。
此外,删除数组元素时,数组长度不受影响。即使您删除数组的最后一个元素,这仍然成立。
当删除运算符删除数组元素时,该元素不再存在于数组中。
您可以参考上面的输出图像,当我使用该值删除数组值时,即使它的输出为真,它也不会从数组中删除该值。但是当我使用索引值进行删除时,它从数组中删除了该值。
注:数组只是去掉了值,并没有清除索引。
也许,您应该使用 splice 从数组中删除特定值并将新数组存储到存储中。
此外,delete 运算符也适用于 JS 对象。如果您想阅读更多相关信息,可以转到此 link。✌
使用拼接删除:
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple']; trees.splice(3,1); console.log(trees);
按照建议,使用 splice
(这也会更新数组的 length
)从数组中删除条目。
const stored = JSON.parse(localStorage.getItem("name"));
const index = stored.indexOf(nameValue);
if (index !== -1) {
stored.splice(index, 1);
localStorage.setItem("name", JSON.stringify(stored));
}
参见:
我以前看过这个问题,但解决方案对我没有帮助,所以我又问了一遍。
目前,我正在将值存储到一个数组中,并且该数组正在存储到本地存储中。
这是对象
data.items -
0: {id: 190217270, node_id: 'MDEwOlJlcG9zaXRvcnkxOTAyMTcyNzA=', name: '3-Bit-CNC-Starter-Pack'}
1: {id: 187179414, node_id: 'MDEwOlJlcG9zaXRvcnkxODcxNzk0MTQ=', name: 'inb-go}
我已经通过这个映射并使用 'name' 作为值。我使用这个函数通过按钮调用这个值
const favs = [];
function checkId(e) {
if (e.target.value !== ""){
if (!favs.includes(e.target.value)){
favs.push(e.target.value);
localStorage.setItem("name", JSON.stringify(favs));
console.log(favs);
document.getElementById("favsarray").innerHTML = favs;
}
}
}
并从本地存储中删除值我正在使用这个函数。
function removeId(e, value) {
if (e.target.value !== "") {
favs.pop(e.target.value);
console.log(favs);
document.getElementById("favsarray").innerHTML = favs;
const stored = JSON.parse(localStorage.getItem("name"));
delete stored[value, e.target.value];
localStorage.setItem("name", JSON.stringify(stored));
console.log(stored);
}
}
虽然该值正在从数组中删除,但并未从本地存储中删除。
旁注 - 我使用单独的按钮调用此函数。
控制台日志
array (item is gone)
[]
localstorage (the value is still there)
[
"Spiral-Up-Cut-Router-Bit"
]
但是如果我 select 将另一个项目添加到 localstorage,那么之前的项目将被删除。
UNFAVORITE - FUNCTION REMOVEid
[
"Spiral-Up-Cut-Router-Bit"
]
NEW FAVORITE - FUNCTION NEWId
[
"graphqless"
]
我希望这是有道理的,我试着尽可能地添加细节。
尝试使用localStorage.removeItem方法从存储中移除项目:
function removeId(e, value) {
if (e.target.value !== "") {
favs.pop();
// other code here
localStorage.removeItem('name'); // method to remove item from storage
}
}
更新:
如果从数组中删除了一个项目并且我们想将这个更新后的值设置为 localstorage,那么我们可以只更新这个值:
function removeId(e, value) {
if (e.target.value !== "") {
favs.pop();
console.log(favs);
document.getElementById("favsarray").innerHTML = favs;
const stored = JSON.parse(localStorage.getItem("name"));
delete stored[value, e.target.value]; // this code looks very fishy - charlietfl
localStorage.setItem("name", JSON.stringify(favs));
console.log(stored);
}
}
最简单的方法是直接覆盖 localStorage 中的项目。从 favs
数组中删除项目后,再次调用 localStorage.setItem("name", JSON.stringify(favs));
就完成了。
我不确定这是否对您有帮助,但无论如何我都会分享。
我不明白上面提到的这部分代码:
delete stored[value, e.target.value];
您在 值和 e.target.value 中传递了什么?如果它是名称 ("Spiral-Up-Cut-Router-Bit") 本身,则删除不会从数组中删除该值。通常,当你在 JS 数组上使用 delete 运算符时,你需要传递值的索引,而不是值本身。
此外,删除数组元素时,数组长度不受影响。即使您删除数组的最后一个元素,这仍然成立。
当删除运算符删除数组元素时,该元素不再存在于数组中。
您可以参考上面的输出图像,当我使用该值删除数组值时,即使它的输出为真,它也不会从数组中删除该值。但是当我使用索引值进行删除时,它从数组中删除了该值。
注:数组只是去掉了值,并没有清除索引。
也许,您应该使用 splice 从数组中删除特定值并将新数组存储到存储中。
此外,delete 运算符也适用于 JS 对象。如果您想阅读更多相关信息,可以转到此 link。✌
使用拼接删除:
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple']; trees.splice(3,1); console.log(trees);
按照建议,使用 splice
(这也会更新数组的 length
)从数组中删除条目。
const stored = JSON.parse(localStorage.getItem("name"));
const index = stored.indexOf(nameValue);
if (index !== -1) {
stored.splice(index, 1);
localStorage.setItem("name", JSON.stringify(stored));
}
参见: