Javascript If / Else给出错误的回复答案

时间:2017-11-09 02:37:50

标签: javascript

我有以下代码来解决练习题。有人可以解释为什么在我使用的原始尝试中没有给出正确的输出'否则' vs第二个我没有的地方?

原始答案:

function openSesame(array, str) {
  for (var i in array) {
    if (array[i] === str) {
      return 'You may pass.';
    } else {
      return 'You shall not pass!';
    }
  }
}

正确答案:

function openSesame(array, str) {
  for (var i in array) {
    if (array[i] === str) {
      return 'You may pass.';
    }
  }
  return 'You shall not pass!';
}

供参考:

var passwords = [
  'Password123',
  'DavidYangsMiddleName',
  'qwerty',
  'S3cur3P455WORD',
  'OpenSesame',
  'ChildhoodPetsName',
  'Gandalf4evaa'
];

INPUT: openSesame(passwords, 'Password123');
OUTPUT: 'You may pass.'
INPUT: openSesame(passwords, 'Balrog');
OUTPUT: 'You shall not pass!'

2 个答案:

答案 0 :(得分:0)

因为else覆盖了所有可能性(当前项目等于给定字符串或者不是),这意味着它将在第一次迭代中终止循环。

这意味着如果数组中的第一项等于字符串,该函数将只给出正确的答案。对于所有其他可能性,它将返回"You shall not pass"

function openSesame(array, str) {
  for (var i in array) {
    // at this point, if array[i] is equal to str
    // we will return "You may pass"
    // if not, we will return "You shall not pass"
    // Since this check happens on the first item
    // and we return some result no matter what
    // no other item will be reached
    if (array[i] === str) {
      return 'You may pass.';
    } else {
      return 'You shall not pass!';
    }
  }
}

var passwords = ['Password123', 'DavidYangsMiddleName', 'qwerty', 'S3cur3P455WORD', 'OpenSesame', 'ChildhoodPetsName', 'Gandalf4evaa'];

passwords.forEach(pw => {
  console.log(`openSesame(passwords, "${pw}") = "${openSesame(passwords, pw)}"`)
})

答案 1 :(得分:0)

您的第一个代码相当于:

const i = Object.keys(array)[0];

if (array[i] === str) {
    return 'You may pass.';
} else {
    return 'You shall not pass!';
}

这就是为什么它不会看其他值