我有以下代码来解决练习题。有人可以解释为什么在我使用的原始尝试中没有给出正确的输出'否则' 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!'
答案 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!';
}
这就是为什么它不会看其他值