2017-11-09 4 views
0

Ich habe den folgenden Code für ein Praxis-Problem. Kann jemand erklären, warum die korrekte Ausgabe nicht im ursprünglichen Versuch gegeben wird, wo ich 'else' gegen die zweite verwende, wo ich nicht?Javascript Wenn/sonst geben falsche Antwort Antwort

Ursprüngliche Antwort:

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

Richtige Antwort:

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

Zum Vergleich:

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

Im ursprünglichen 'Sie unabhängig von der return' Wert Ihres 'if/then'. Dies bewirkt, dass die for-Schleife nur einmal ausgeführt wird. –

Antwort

0

Da die else mit dort alle Möglichkeiten abdeckt (entweder das aktuelle Element ist gleich die angegebene Zeichenfolge oder nicht), was bedeutet, dass die Schleife beendet wird die erste Iteration.

Dies bedeutet, dass die Funktion nur dann eine korrekte Antwort liefert, wenn das erste Element im Array der Zeichenfolge entspricht. Für alle anderen Möglichkeiten wird "You shall not pass" zurückgegeben.

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)}"`) 
 
})

+0

Macht vollkommen Sinn. Vielen Dank! – a12m12

+0

@ a12m12 kein problem, glücklich zu helfen :) – nem035

0

Ihr erster Code entspricht:

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

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

Das ist, warum es nicht auf andere Werte aussehen