繁体   English   中英

我在带有 for 循环的 function 中放了一个“else {return false}”,现在它不起作用了。(javascript)

[英]I put an “else {return false}” in a function with for loop and now it won't work.(javascript)

我正在尝试在 function 中创建一个日志,这样当我输入数据库中的用户名和密码时,它将检查是否匹配并返回新闻源。 数据库是这样的:

var database=[
    {
        username:"Jay",
        password:"1234",
    },
    {
        username:"Kate",
        password:"4567",
    },
    {
        username:"Betty",
        password:"789",
    }

]
var newsfeed=[
    {
        username:"Jay",
        timeline:"happy"
    },
    {
        username:"Kate",
        timeline:"sad"
    },
    {
        username:"Mary",
        timeline:"boring"
    },
    {
        username:"Betty",
        timeline:"peaceful",
    }

];

现在我尝试获取用户名和密码中的提示,例如“Betty”和“789”,它返回“对不起,用户名和密码错误”但它在数据库中:! 这是代码:

var usernamePrompt = prompt("what is your username");
var passwordPrompt = prompt("what is your password?");

function isUserValid(username, password) {
    for (var i = 0; i < database.length; i++) {
        if (database[i].username === username &&
            database[i].password === password) {
            return true;
        } else {
            return false;
        }
    }
}
        function signIn(username, password){
        if (isUserValid(username, password)){
            console.log(newsfeed);
        }else{
            alert("sorry, wrong username and password");
        }
    }
    signIn(usernamePrompt, passwordPrompt);

我只是得到如下正确答案,但是 1)我不明白放置“else”和不放置它之间的区别。 2)我不明白为什么我们不需要输入“if(isUserValid(用户名,密码===true))”来表示需要匹配的条件。

var usernamePrompt = prompt("what is your username");
var passwordPrompt = prompt("what is your password?");

function isUserValid(username, password){
    for(var i=0;i<database.length;i++){
        if(database[i].username===username&&           
            database[i].password===password){
               return true;
            }
                }
            return false;
        }

function signIn(username, password){
        if (isUserValid(username, password)){
            console.log(newsfeed);
        }else{
            alert("sorry, wrong username and password");
        }
    }
    signIn(usernamePrompt, passwordPrompt);

感谢您的友好帮助。

在您的代码中,一旦第一个 object 被迭代,它将立即返回。使用some将检查是否有任何 object 与通过提示提供的值匹配。 如果任何值匹配,那么它将返回 true。也可以使用toLowerCase进行不区分大小写的搜索

 var database = [{ username: "Jay", password: "1234" }, { username: "Kate", password: "4567" }, { username: "Betty", password: "789" } ]; var newsfeed = [{ username: "Jay", timeline: "happy" }, { username: "Kate", timeline: "sad" }, { username: "Mary", timeline: "boring" }, { username: "Betty", timeline: "peaceful", } ]; function isUserValid(username, password) { return database.some(item => item.username.toLowerCase() === username.toLowerCase() && item.password.toLowerCase() === password.toLowerCase()); } function signIn(username, password) { if (isUserValid(username, password)) { console.log(newsfeed); } else { alert("sorry, wrong username and password"); } } var usernamePrompt = prompt("what is your username"); var passwordPrompt = prompt("what is your password?"); signIn(usernamePrompt, passwordPrompt);

else 仅在第一个元素之后返回 false。它应该检查所有元素,然后返回 false。

您可以使用.some function 进行简化。

 database = [ { username: "user1", password: "pass1" }, { username: "user2", password: "pass2" }, { username: "user3", password: "pass3" }, ]; const isUserValid = (username, password) => database.some( ({ username: du, password: dp }) => du == username && dp == password ); function signIn(username, password) { if (isUserValid(username, password)) { return "AUTHORIZED"; } else { return "sorry, wrong username and password"; } } console.log(signIn("user", "pass")); console.log(signIn("user2", "pass2")); console.log(signIn("user1", "pass"));

它失败是因为如果用户名/密码不是数据库中的第一个,那么它将不匹配,返回false并退出 function。 for 循环不会继续寻找其他匹配项。 如果您检查了所有可能性,您只想返回false

更清楚地分离您的功能,以便它们更容易理解,如下所示:

const usernamePrompt = prompt("what is your username");
const passwordPrompt = prompt("what is your password?");

function isUserValid(username, password) {
  for (let i = 0; i < database.length; i++) {
    if (database[i].username === username) {
      // found the user. return true if the password is right, otherwise false
      return database[i].password === password;
    }
  }
  return false; // <-- false if user is never recognized
}

function signIn(username, password) {
  if (isUserValid(username, password)) {
    console.log(newsfeed);
  } else {
    alert("sorry, wrong username and password");
  }
}

signIn(usernamePrompt, passwordPrompt);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM