1

単語に複数の文字があるかどうかを確認しようとしています (すべての単語は 5 文字です)。ライブラリと呼ばれる変数に 8938 単語の配列があります。

           function checkLetters(word){
                var constant = 0;
                for(i=0;i<5;i++){
                    for(j=i+1;j<5;j++){
                        if(word.charAt(i) == word.charAt(j)){
                            return false;
                            break;
                        } else {
                            return true;
                        }
                    }
                }
            }
            if(compPrompt == 5 && checkLetters(compChoice) == true){
                console.log(checkLetters(compChoice));
                $('.right').append('<p id="winQuestion">Is "'+compFinalChoice+'" your word?');
                $('.right').append('<div class="yesNo" id="yesQ"><p>Yes</p></div>');
                $('.right').append('<div class="yesNo" id="noQ"><p>No</p></div>');
                $('#yesQ').click(function() {
                    alert('Your word is "'+compFinalChoice+'". You lose!');
                    document.location.reload(true);
                });
                $('#noQ').click(function() {
                    $('.yesNo').remove();
                    $('#winQuestion').remove();
                    var splitCompChoice = compFinalChoice.split('');
                    var constant = 0;
                    var possibleAnswers = [];
                    for(var k=0;k<8939;k++){
                        for(var i=0;i<5;i++){
                            if(library[k].indexOf(splitCompChoice[i]) > -1){
                                constant++;
                                if(constant = 5 && checkLetters(library[k]) == true){
                                    possibleAnswers.push(library[k]);
                                }
                            }
                        }
                });
            }

コードに2つの問題があります。1 つはif(compPrompt == 5 && checkLetters(compChoice) == true){いつcheckLetters(compChoice)が正しくないか、2 つはlibrary[k]定義されていないことを示しています。

4

2 に答える 2

0

checkLetters 関数が false を返したときに if ステートメントが渡される問題を解決するには、ステートメントを次のように変更します。

if(compPrompt == 5 && checkLetters(compChoice) == true)

if(compPrompt == 5 && checkLetters(compChoice))
于 2013-08-05T14:22:11.887 に答える
0

最初の関数では、最初の文字が 2 番目の文字と等しくない場合に true を返します。これを修正するには、次のように変更する必要があります。

function checkLetters(word){
    var constant = 0;
    for(i=0;i<5;i++){
        for(j=i+1;j<5;j++){
            if(word.charAt(i) == word.charAt(j)){
                return false;
                break;
            } else {
                return true;
            }
        }
     }
}

に:

function checkLetters(word){
    var constant = 0;
    for(i=0;i<5;i++){
        for(j=i+1;j<5;j++){
            if(word.charAt(i) == word.charAt(j)){
                return false;
                break;
            } 
        }
    }
    return true;
}

library次に、ここに投稿したコードのどこで宣言したかがわからないため、おそらくどこかでvar(ローカル変数) として定義されていると思います。つまり、他の関数内で使用できるようにしたい場合は、渡す必要があります。

更新:
についてlibrary- 次のようにコードを変更してみてください。

$('#noQ').click(function(library) {
    $('.yesNo').remove();
    $('#winQuestion').remove();
    var splitCompChoice = compFinalChoice.split('');
    var constant = 0;
    var possibleAnswers = [];
    for(var k=0;k<8939;k++){
        for(var i=0;i<5;i++){
            if(library[k].indexOf(splitCompChoice[i]) > -1){
                constant++;
                if(constant = 5 && checkLetters(library[k]) == true){
                    possibleAnswers.push(library[k]);
                }
            }
        }
}(library));
于 2013-08-05T14:17:26.983 に答える