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

时间:2019-07-18 03:23:26

标签: javascript for-loop foreach

我创建了一个数组和var:

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 database中的所有数组值,然后检查它们是true还是false 这是其余的代码:

database.forEach(checkDatabase2);//using forEach

function checkDatabase2(username,password) {
    if (username === database.username && password === database.password){
        return true;
    }
return false;

最后检查是否正确,然后打印newsFeed,否则它将发出警报,这是我的工作:

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

但是,无论我输入什么值,它总是出现在alert("Opps! Worng Password!");上,当我从database =[]输入正确的值时,如何修复它,它将返回true ??

5 个答案:

答案 0 :(得分:2)

您拥有的一种选择是使用some来检查数组元素中至少有一个元素是用户名和密码

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

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

console.log(checkDatabase2("bob", "777"));
console.log(checkDatabase2("bob", "NOT777"));

答案 1 :(得分:0)

请勿使用forEach(),而应使用some()

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

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

答案 2 :(得分:0)

请勿使用forEach,而应使用some

function validate (username, password) {
  return database.some(function(item) {
    return (item.username === username && item.password === password);
  });
}

function checkDatabase2 (username, password) {
   if (validate(username, password)) {
     return true;
   }
   return false;
}

答案 3 :(得分:0)

您可以像下面这样使用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);

答案 4 :(得分:0)

我认为forEach()并不是执行此操作的最佳方法,您可以尝试filter(),也可以尝试some()

由于上面有很多some()的示例,因此无法提供filter()的示例here