2017-09-09 3 views
1

Je comprends comment fonctionne la fonction suivante en général. MAIS pourquoi ne sort-il pas après la première itération (quand il y a un palindrome)? Il vérifie le premier caractère par rapport au dernier dans l'instruction if, ce qui est vrai, ce qui devrait (dans ma logique) exécuter l'instruction de retour ... Merci pour toute aide expliquant cela! :)Pourquoi cette fonction ne se ferme-t-elle pas après la première itération?

function palindrome(str) { 
    var lowerCaseStr = str.toLowerCase(); 
    for (var i = 0; i < lowerCaseStr.length; i++) 
    debugger; 
    if (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]){ 
     return true; 
    } 
    return false; 
} 
+1

BTW, vous itérer que 'debugger'. –

Répondre

0

Vous devez changer la logique, vérifier l'inégalité et de retour false. Si vous atteignez la fin, renvoyez true.

function palindrome(str) { 
    var lowerCaseStr = str.toLowerCase(); 
    for (var i = 0; i < lowerCaseStr.length; i++) { 
     debugger; 
     if (lowerCaseStr[i] !== lowerCaseStr[lowerCaseStr.length - i - 1]) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

1. Pourquoi est-ce différent de mon chemin? et 2. Retour à ma question: pourquoi la fonction (boucle) ne s'arrête-t-elle pas après avoir comparé les deux premiers caractères? JE VOUS REMERCIE! – sh998

+0

c'est différent pour vérifier non pas l'égalité, mais pour non égal et la valeur de retour est également commuté, 'true' devient' false' et vice versa. vous quittez avec le premier caractère trouvé, mais vous n'avez pas besoin de vérifier la similitude, mais l'inégalité. –

2

Il ne sort pas après la première itération, mais après lowerCaseStr.length itérations parce que votre code est équivalent au code ci-dessous

function palindrome(str) { 
    var lowerCaseStr = str.toLowerCase(); 
    for (var i = 0; i < lowerCaseStr.length; i++){ 
     debugger; 
    } 

    if (lowerCaseStr[lowerCaseStr.length] === lowerCaseStr[-1]){ 
     return true; 
    } 

    return false; 
} 

qui est, il itère lowerCaseStr.length; fois, mais la seule chose qu'il fait pour chaque itération est appel debugger après qu'il teste aux éléments dans le tableau qui n'existe pas. (Les deux indices sont hors limites). Cela résulte en une comparaison de deux fois undefinedundefined === undefined ce qui est toujours vrai.

En tant que nœud de côté si vous revenez soit vrai ou faux selon une expression booléenne puis envisager d'utiliser une instruction de retour à la place:

return (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]);