Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JS查找localStorage中的命名对象数组中是否存在特定的值对_Javascript_Arrays_Json_Local Storage - Fatal编程技术网

Javascript 使用JS查找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

在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));
    

    您必须解析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对象,该对象与我在post
    Storage{…}
    中的第一个块相同,如果您在浏览器控制台中运行我的代码块,实际上,如果没有找到未捕获的语法错误:JSON中的意外标记g位于位置0我编辑了我的答案,如果存储的数据不是字符串化对象,则无法解析它们,因此必须将其包装在
    try catch
    块中。