[英]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.