为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2022-08-04 09:33:37
我正在尝试创建一个登录函数,以便当我输入数据库中的用户名和密码时,它将检查这是否匹配并返回新闻源。数据库是这样的: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)我不明白放置“其他”和不放置它之间的区别。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);感谢您的帮助。
查看完整描述

4 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

在代码中,它将在迭代第一个对象后立即返回。使用 它将检查是否有任何对象与通过提示提供的值匹配。如果任何值匹配,则它将返回 true。还用于进行不区分大小写的搜索sometoLowerCase


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


查看完整回答
反对 回复 2022-08-04
?
呼如林

TA贡献1798条经验 获得超3个赞

您可以简化函数的使用。.some


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


查看完整回答
反对 回复 2022-08-04
?
catspeake

TA贡献1111条经验 获得超0个赞

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


查看完整回答
反对 回复 2022-08-04
?
偶然的你

TA贡献1841条经验 获得超3个赞

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


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


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


查看完整回答
反对 回复 2022-08-04
  • 4 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号