首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >signIn函数总是返回“错误信息”

signIn函数总是返回“错误信息”
EN

Stack Overflow用户
提问于 2020-04-10 07:15:37
回答 3查看 47关注 0票数 0

代码语言:javascript
复制
var database = [{
    username: '1',
    password: '2',
  },
  {
    username: '3',
    password: '4',
  },
];
var newsfeed = [{
    username: 'Bobby',
    timeline: 'So tired from all that learning!',
  },
  {
    username: 'Sally',
    timeline: 'Javascript is sooooo cool!',
  },
  {
    username: 'Mitch',
    timeline: 'Javascript is preeetyy cool!',
  },
];


var userNamePrompt = prompt('Enter username:');
var passwordPrompt = prompt('Enter password:');
function signIn(username, password) {
  database.forEach(function (username, password) {
      if (username === database.username && password === database.password) {
        console.log(newsfeed);
      }

      console.log('Wrong information');
    }
  );
}
signIn(userNamePrompt, passwordPrompt);

编辑:我怀疑if语句((username === database.username && password === database.password)中的条件由于某些原因总是导致false。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-10 08:03:39

forEach的回调函数返回数据库元素的实例。因此,将其更改为:

代码语言:javascript
复制
var databases = [{
    username: '1',
    password: '2',
  },
  {
    username: '3',
    password: '4',
  },
];
var newsfeed = [{
    username: 'Bobby',
    timeline: 'So tired from all that learning!',
  },
  {
    username: 'Sally',
    timeline: 'Javascript is sooooo cool!',
  },
  {
    username: 'Mitch',
    timeline: 'Javascript is preeetyy cool!',
  },
];


var userNamePrompt = prompt('Enter username:');
var passwordPrompt = prompt('Enter password:');
function signIn(username, password) {
  databases.forEach(function (database) {
      if (username === database.username && password === database.password) {
        console.log(newsfeed);
      }
      else{console.log('Wrong information');}

      
    }
  );
}
signIn(userNamePrompt, passwordPrompt);

我建议这样做:

代码语言:javascript
复制
var databases = [{
    username: '1',
    password: '2',
  },
  {
    username: '3',
    password: '4',
  },
];
var newsfeed = [{
    username: 'Bobby',
    timeline: 'So tired from all that learning!',
  },
  {
    username: 'Sally',
    timeline: 'Javascript is sooooo cool!',
  },
  {
    username: 'Mitch',
    timeline: 'Javascript is preeetyy cool!',
  },
];


var userNamePrompt = prompt('Enter username:');
var passwordPrompt = prompt('Enter password:');
function signIn(username, password) {
  for(let i = 0; i<databases.length;i++){
  const database = databases[i];
      if (username === database.username && password === database.password) {
        console.log(newsfeed);
        return
      }
      
    }
    console.log('Wrong information');
  
}
signIn(userNamePrompt, passwordPrompt);

票数 0
EN

Stack Overflow用户

发布于 2020-04-10 07:59:55

传递给forEach回调的参数不是数据库数组中对象的属性,而是对象本身。

您需要在函数中访问该对象的属性。

代码语言:javascript
复制
database.forEach(function (obj) {
      if (obj.username === database.username && obj.password === database.password) {
        console.log(newsfeed);
      }

      console.log('Wrong information');
    }
  );
票数 0
EN

Stack Overflow用户

发布于 2020-04-10 08:34:15

我检查了你的原始代码,发现了一些问题。首先,forEach并不像您期望的那样工作。它在每次迭代时将数组的一个元素发送到回调函数。如下所示:

代码语言:javascript
复制
array.forEach( function(elementOfArray) { return ... }

在您的代码中,每个元素都是一个对象,因此可以使用以下命令检查它的值

代码语言:javascript
复制
var database = [{
    username: '1',
    password: '2',
  },
  {
    username: '3',
    password: '4',
  },
];

var userNamePrompt = prompt('Enter username:');
var passwordPrompt = prompt('Enter password:');

function signIn(username, password) {
  var userIsFound = false;
  database.forEach(function (user) {
    if (username === user.username && password === user.password) {
      userIsFound = true;
    };
  })
  if (userIsFound) return 'access granted'
  return 'access denied'
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61131711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档