Javascript 使用JS查找localStorage中的命名对象数组中是否存在特定的值对
在localStorage中,我以前设置了以这种格式存储的各种对象Javascript 使用JS查找localStorage中的命名对象数组中是否存在特定的值对,javascript,arrays,json,local-storage,Javascript,Arrays,Json,Local Storage,在localStorage中,我以前设置了以这种格式存储的各种对象 console.log(localStorage) // Outputs the storage this way, it may contain different objects (randid for example) Storage { 876346545: "{"ABA":"876346545","ABB":"375785335
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
获取所有值,并开始逐个筛选它们==
而不是=
,如您在问题中所示。此外,在比较时要注意类型。您正在将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));
您必须解析localStorage中存储的对象,因为它存储为字符串
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));
for(localStorage中的var键){
试一试{
const value=JSON.parse(localStorage[key]);
如果(value.ABA==“876346545”){
var m=localStorage[key];
console.log(“找到:”,m)
打破
}
}捕获(e){
继续;
}
}
好的,您对JSON进行了字符串化,因此存储的值是一个字符串,因此您无法访问它的ABA属性。@DBalazs如果我不进行字符串化,它的存储方式类似于876346545:“[object object]”
这也是一个字符串words@Cadmos,将其字符串化不是一个错误,但是您必须记住JSON.parse()
在您尝试访问它之前。您可以执行localStorage.indexOf(“'ABA:“876346545”)>-1
。除非您需要其他值,否则解析JSON是毫无意义的。您也可以使用字符串操作来实现它。JSON.parse()
应该在for
循环中为每个data[key]
调用。否则,data[key]
是一个字符串,因此它本身不能有一个ABA
key。我没有在userData中搜索它,我试图在localStorage中添加的对象中找到它,查看我的问题的第二个块我已更新了答案。未定义
将其应用于localStorage对象,该对象与我在postStorage{…}
中的第一个块相同,如果您在浏览器控制台中运行我的代码块,实际上,如果没有找到未捕获的语法错误:JSON中的意外标记g位于位置0我编辑了我的答案,如果存储的数据不是字符串化对象,则无法解析它们,因此必须将其包装在try catch
块中。