Javascript 循环通过 JSON 对象数组

标签 javascript arrays json object

所以我有一个登录表单,我想检查输入的名称和密码是否已存在于 JSON 对象中,这两种情况都会提示不同的消息,但问题是它做得不对,这是代码为了更清楚:

     function registerInfo(){
     var name = document.forms[0].username.value;
     var pw = document.forms[0].pw.value

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var response = JSON.parse(xhttp.responseText);
        console.log(response);

    if (name === "" || pw === "") {
    alert ('please complete all the forms')
    } 

    for (var i = 0; i < response.loginfo.length; i++){
      if ( name === response.loginfo[i].username && pw === 
            response.loginfo[i].password) {
        alert('Welcome back ' + name);
        break;
        } // if statement curly braces
    } // loop curcly braces 

    for (var i = 0; i < response.loginfo.length; i++){
        if ( name != response.loginfo[i].username && pw != response.loginfo[i].pw){
        alert('Welcome here new ');
        break;
        } // if statement curcly braces 
        } // for 
      } // ready state if statement curly braces
    } // function curly braces
    xhttp.open("GET", "login.json", true);
    xhttp.send();

    return false;
   }

这是用于快速测试的 JSON 对象

     {
      "loginfo" : [
      { 
          "username" : "moh",
          "password" : "lol"
      },
      {
          "username" : "zaki",
          "password" : "123"
      }         
      ]
      }

问题是当用户输入 JSON 对象 id 中存在的用户名和密码时,确实会发出警报“欢迎回来!” ,还有“欢迎新人”,我不想这样做,因为最新的警报是针对新用户的,他们的凭据不存在于 JSON 对象中。

最佳答案

最简单的修复是不允许执行第二个 for 循环,如果找到匹配项,那么

  • 如果找到匹配,则设置一个标志,如果设置了该标志,则不执行第二个 for 循环。

  • Return 而不是从第一个 for 循环中中断。

但是,您可以通过使用 Array.prototype.some 检查是否有任何值匹配来减少代码的冗长

var hasMatch = response.loginfo.some( s => s.username === name && s.password === pw );

hasMatch 如果找到匹配则返回 true

alert( "Welcome " + (hasMatch ? "back" + name : "here new" ) );

关于Javascript 循环通过 JSON 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49917553/

相关文章:

c# - 在 C# 中添加矩阵?

json - 使用通用 JSON 对象作为请求体

javascript - 有没有比将分块输入附加到字符串并随后在其上运行 `JSON.parse()` 更好的方法来接受 JSON 数据?

c - 为什么在使用 malloc() 动态分配内存后,字符数组打印的字符比需要的少一个?

if 语句的 Python 问题

javascript - 将 base64 图像转换为 multipart/form-data 并使用 jQuery 发送

javascript - QML 中的第一个 XHR 请求非常慢(在 v8 上运行的 javascript)

javascript - 是否可以通过 Greasemonkey 脚本使用 Firefox Add-on SDK?

javascript - 移动到 d3 v5 后颜色后代节点和链接断开

php - 最初从 MySQL 数据库中获取一个数组,并在每次用户看到它时取消设置它的一个元素是不是很糟糕?