javascript - 用JS查找localStorage的命名对象数组中是否存在特定的一对值
问题描述
在 localStorage 我之前设置了以这种格式存储的各种对象
console.log(localStorage)
// Outputs the storage this way, it may contain different objects (randid for example)
Storage {
876346545: "{"ABA":"876346545","ABB":"37578533567","ABC":"AE123456","ABD":"1234567890123456"}",
randid: "fhjidc06om230j2r367gh1i5iec",
353446545: "{"ABA":"353446545","ΑBB":"12343212341","ΑBC":"CC949590","ABD":"5943949562340543"}",
length: 3
}
例如,我尝试查找此对象数组中是否存在特定对
//Pseudo-code
if anyofObject in localStorage contains pair ("ABA":"876346545") return true or false
我的代码没有达到我的预期
var data = JSON.parse(localStorage) // I tried and without Parsing it as JSON
for (var key in data) {
if (data[key].ABA = "876346545") {
var m = data[key];
console.log("Found: ", m)
break;
}
}
解决方案
如果您想浏览本地存储中的所有值存储。您必须执行以下操作:
- 使用 获取所有值
Object.values
,并开始一一过滤 - 尝试将它们解析为 JSON 对象,有些会失败,因为它们不是 JSON 对象,那些不是我们感兴趣的
- 那些成功解析的,您需要检查键并查看该键的值是否与类型和值匹配正确匹配。返回 true 以便我们可以完成搜索并将值存储在变量中。
另外,请注意,当您比较值时使用===
而不是=
在您的 if 语句中,如您在问题中所示。另外,比较时要注意类型。您将 ABA 设置为数字,但您尝试与字符串进行比较。
userData = {
"ABA": 876346545,
"ABB": 37578533567,
"ABC": "AE123456",
"ABD": 1234567890123456
};
localStorage.setItem("Some Random Key", JSON.stringify(userData));
// This will find the object and store it in foundObject variable
const foundObject = Object.values(localStorage).find(v => {
try {
return JSON.parse(v).ABA === 876346545;
} catch(e) {
return false;
};
});
console.log(JSON.stringify(foundObject));
// This will find the object and store true if found, false if not found in hasObject variable
const hasObject = Object.values(localStorage).some(v => {
try {
return JSON.parse(v).ABA === 876346545;
} catch(e) {
return false;
};
});
console.log(JSON.stringify(hasObject));