如果JavaScript中存在条件,如何使用forEach循环返回true

如果JavaScript中存在条件,如何使用forEach循环返回true,javascript,for-loop,foreach,Javascript,For Loop,Foreach,我创建了一个数组和变量: var database = [ { username:"candy", password:"666" }, { username: "abby", password: "123" }, { username: "bob", password: "777" } ]; var newsFeed = [ {

我创建了一个数组和变量:

var database = [
    {
        username:"candy",
        password:"666"
    },
    {
        username: "abby",
        password: "123"
    },
    {
        username: "bob",
        password: "777"
    }
];

var newsFeed = [
    {
        username: "Bob",
        timeline: "So tired from all that learning!"
    },
    {
        username: "Midori",
        timeline: "Javascript is sooooo cool!"
    },
    {
        username: "Abby",
        timeline: "Javascript is preeetyy cool!"
    }
]

var usernamePrompt = prompt("What\'s your username?");
var passwordPrompt = prompt("What\'s your password?");
我想使用forEach检查
var数据库中的所有数组值,然后检查它们是
true
还是
false
以下是代码的其余部分:

database.forEach(checkDatabase2);//using forEach

function checkDatabase2(username,password) {
    if (username === database.username && password === database.password){
        return true;
    }
return false;
最后,要检查它是否正确,请打印
新闻提要
,因为它将有警报,下面是我要做的:

function signIn(username,password) {
    if (checkDatabase2(username,password)===true){
            console.log(newsFeed); 
    }else{
        alert("Opps! Worng Password!");
    }
}
signIn(usernamePrompt,passwordPrompt);
但当我输入我输入的值时,总是出现
alert(“Opps!Worng Password!”)如何修复它当我从
数据库=[]
中输入正确的值时,它将返回true???

不要使用
forEach()
,使用
some()

您还必须将循环放入
checkDatabase2()
函数中,而不是在循环中调用它

function checkDatabase2(username, password) {
    return database.some(user => user.username == username && user.password = password);
}

您可以选择使用
some
检查数组元素中是否至少有一个元素是用户名和密码

var数据库=[{“用户名”:“糖果”,“密码”:“666”},{“用户名”:“艾比”,“密码”:“123”},{“用户名”:“鲍勃”,“密码”:“777”}];
函数checkDatabase2(用户名、密码){
返回database.some(o=>o.username==username&&o.password==password);
}
日志(checkDatabase2(“bob”,“777”));

log(checkDatabase2(“bob”,“NOT777”)不要使用
forEach
,请使用
一些

函数验证(用户名、密码){
返回数据库.some(函数(项){
返回(item.username==用户名和&item.password==密码);
});
}
函数checkDatabase2(用户名、密码){
如果(验证(用户名、密码)){
返回true;
}
返回false;

}
您可以使用
find
代替下面的
forEach


var database = [
  {
    username: "candy",
    password: "666"
  },
  {
    username: "abby",
    password: "123"
  },
  {
    username: "bob",
    password: "777"
  }
];

var newsFeed = [
  {
    username: "bob",
    timeline: "So tired from all that learning!"
  },
  {
    username: "midori",
    timeline: "Javascript is sooooo cool!"
  },
  {
    username: "abby",
    timeline: "Javascript is preeetyy cool!"
  }
];

function checkDatabase2(username, password) {
  return database.find(
    item => item.username === username && item.password === password
  );

}

function signIn(username,password) {
  if (checkDatabase2(username,password)){
          console.log(newsFeed); 
  }else{
      alert("Opps! Worng Password!");
  }
}

var usernamePrompt = prompt("What\'s your username?");
var passwordPrompt = prompt("What\'s your password?");


signIn(usernamePrompt, passwordPrompt);
我认为forEach()不是最好的方法,你可以尝试
filter()
,或者你可以尝试
some()


由于上面有很多
some()
示例,我将提供
filter()
exampe

回调函数。forEach()
将始终返回
未定义的
,因此不要期望任何布尔值,除非该函数变异或修改在函数外部声明的预先存在的数组。