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

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


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


感谢您的帮助。


慕码人8056858
浏览 166回答 4
4回答

函数式编程

在代码中,它将在迭代第一个对象后立即返回。使用 它将检查是否有任何对象与通过提示提供的值匹配。如果任何值匹配,则它将返回 true。还用于进行不区分大小写的搜索sometoLowerCasevar database = [{&nbsp; &nbsp; username: "Jay",&nbsp; &nbsp; password: "1234"&nbsp; },&nbsp; {&nbsp; &nbsp; username: "Kate",&nbsp; &nbsp; password: "4567"&nbsp; },&nbsp; {&nbsp; &nbsp; username: "Betty",&nbsp; &nbsp; password: "789"&nbsp; }];var newsfeed = [{&nbsp; &nbsp; username: "Jay",&nbsp; &nbsp; timeline: "happy"&nbsp; },&nbsp; {&nbsp; &nbsp; username: "Kate",&nbsp; &nbsp; timeline: "sad"&nbsp; },&nbsp; {&nbsp; &nbsp; username: "Mary",&nbsp; &nbsp; timeline: "boring"&nbsp; },&nbsp; {&nbsp; &nbsp; username: "Betty",&nbsp; &nbsp; timeline: "peaceful",&nbsp; }];function isUserValid(username, password) {&nbsp; return database.some(item => item.username.toLowerCase() === username.toLowerCase() && item.password.toLowerCase() === password.toLowerCase());}function signIn(username, password) {&nbsp; if (isUserValid(username, password)) {&nbsp; &nbsp; console.log(newsfeed);&nbsp; } else {&nbsp; &nbsp; alert("sorry, wrong username and password");&nbsp; }}var usernamePrompt = prompt("what is your username");var passwordPrompt = prompt("what is your password?");signIn(usernamePrompt, passwordPrompt);

呼如林

您可以简化函数的使用。.somedatabase = [&nbsp; { username: "user1", password: "pass1" },&nbsp; { username: "user2", password: "pass2" },&nbsp; { username: "user3", password: "pass3" },];const isUserValid = (username, password) =>&nbsp; database.some(&nbsp; &nbsp; ({ username: du, password: dp }) => du == username && dp == password&nbsp; );function signIn(username, password) {&nbsp; if (isUserValid(username, password)) {&nbsp; &nbsp; return "AUTHORIZED";&nbsp; } else {&nbsp; &nbsp; return "sorry, wrong username and password";&nbsp; }}console.log(signIn("user", "pass"));console.log(signIn("user2", "pass2"));console.log(signIn("user1", "pass"));

catspeake

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

偶然的你

它失败,因为如果用户名/密码不是数据库中的第一个用户名/密码,那么它将不匹配,返回并退出函数。for 循环不会继续查找其他匹配项。您只想在检查了所有可能性后返回。falsefalse更清楚地分离您的函数,以便它们更容易理解,如下所示:const usernamePrompt = prompt("what is your username");const passwordPrompt = prompt("what is your password?");function isUserValid(username, password) {&nbsp; for (let i = 0; i < database.length; i++) {&nbsp; &nbsp; if (database[i].username === username) {&nbsp; &nbsp; &nbsp; // found the user. return true if the password is right, otherwise false&nbsp; &nbsp; &nbsp; return database[i].password === password;&nbsp; &nbsp; }&nbsp; }&nbsp; return false; // <-- false if user is never recognized}function signIn(username, password) {&nbsp; if (isUserValid(username, password)) {&nbsp; &nbsp; console.log(newsfeed);&nbsp; } else {&nbsp; &nbsp; alert("sorry, wrong username and password");&nbsp; }}signIn(usernamePrompt, passwordPrompt);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript