Javascript通过JSON循环一个对象数组

时间:2018-04-19 09:31:29

标签: 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对象中存在的密码时会发出警告&#34;欢迎回来!&#34; ,还欢迎来到新的&#34;我不想这样做,因为最新的警报是针对新用户的,他们的凭证在JSON对象中不存在。

1 个答案:

答案 0 :(得分:1)

如果找到匹配,最简单的修复将不允许执行第二个for循环,所以

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

  • Return而不是从第一个for-loop中断。

但是,您可以使用Array.prototype.some检查是否有任何值匹配

,从而使代码更简洁
var hasMatch = response.loginfo.some( s => s.username === name && s.password === pw );
如果找到匹配项,

hasMatch会返回true

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