2017-09-09 9 views
1

以下の機能が一般的にどのように機能するかはわかります。しかし、最初の反復後に(回文がある場合)なぜ終了しないのですか? if文の最後の文字と最初の文字をチェックします。これは真ですが、私のロジックではreturn文を実行する必要があります...これについて説明してくれてありがとう! :)最初の反復後にこの関数が終了しないのはなぜですか?

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

はところで、あなただけの 'debugger'を繰り返します。 –

答えて

0

ロジックを切り替えて、不等式をチェックしてfalseを返す必要があります。最後に到達した場合は、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.なぜ私の方法と違うのですか? 2.私の質問に戻る:最初の2文字を比較した後、なぜ機能(ループ)が停止しないのですか?ありがとうございました! – sh998

+0

等価ではないが等しくないかどうかをチェックするのと異なり、戻り値も同様に切り替えられます。「真」は「偽」になり、逆も同様です。最初に見つかった同じ文字で終了しますが、同一性をチェックする必要はありませんが、不等式です。 –

2

あなたのコードがある

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; 
} 

以下のコードと同等ですので、それはそれはlowerCaseStr.length;回反復したが、それはのためにする唯一の事、最初の反復後でlowerCaseStr.length回の反復後に終了しませんそれぞれの反復は、存在しない配列内の要素に対してテストを行った後にdebuggerと呼び出されます。 (両方の指標が範囲外です)。その結果、2回の比較が行われます。undefinedundefined === undefinedこれは常に真です。側ノードとして

あなたはブール式に応じて、trueまたはfalseを返す場合は、代わりに1つのreturn文を使用することを検討しては:

return (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]); 
関連する問題