2017-09-26 8 views
0
私はトラブル文を返すが生じています

を通過するためのループを防ぐ他の場合:私はフレーズを入力すると私の正規表現一致が見つからないときにオブジェクト

function ai(message) { 
    if (username.length < 3) { 
     username = message; 
     send_message("Oh, well hello " + username + ", My name is Donald J Trump and i'm a big boy"); 
    } else { 
     for (i = 0; i <= botChat.length; i++) { 
      var re = new RegExp(botChat[i][0], "i"); 
      if (re.test(message)) { 
       var length = botChat[i].length - 1; 
       var index = Math.ceil(length * Math.random()); 
       var reply = botChat[i][index]; 
       send_message(reply); 
      } 
     } 
    } 
} 

それが正しくごとのように配列の最初の行を一致させることができますforループ。私が抱えている問題は、elseステートメントを追加しようとすると、配列を適切にループしなくなるということです。

私が試してみました:

else if (re.test(message) === false) { 
    send_message("i can't be expected to know everything"); 
} 

をしかし、それは動作しません、それはbotChat[0][0]過ぎてループからループを防止します。

私も試してみた:

if (send_message().val() == "") { 
    // ... 
} 

しかし、私のコードは、もはや働くたびに。私の配列に「上記の一致が見つからない場合はこれを選択してください」という何かを追加する方法がありますか?

if/elseが動作するように、または私のコードを作業するだけの方法はありますか?

は、codepenです。

+0

ここでは 'botChat'を表示していませんが、このコードは初期化ごとに1回実行する必要があるときに正規表現のコンパイルと再コンパイルに多くの時間を費やしているようです。 – tadman

+0

'for(i = 0; i <= botChat.length; i ++)' botChat.lengthが最初の次元の長さを与える場合、インクリメントの 'i ++'を止めるforのブロック内には何もありません。 botChatは再割り当てされず、ループの変数 'i'も変更されません。どのような問題がありますか?他に追加できる唯一の場所はif(re.test(message)){} 'else {}' reはスコープ内のforブロックであるため、他にも問題があります。あなたは、ifブロックをコメントアウトして、各パスでループvar 'i'を表示することができます。 – sln

+0

私が正しく理解していれば、最も簡単な解決策は 'send_message'を呼び出した後に' return'してループを処理し続けることです。ループの終了後、あなたの 'else'処理を行うことができます。私は '.val()'を呼び出す理由に従わないので、 'send_message'が何も返さなくても入力値にアクセスするjQueryメソッドをランダムに呼び出すようです。 – skirtle

答えて

0

私はあなたのcodepenをチェックしsend_message()戻りundefinedundefined.val()メソッドを持っていないため、これらの行が例外を投げているので、ライン190および194 console.log(send_message().val());は、ループを破壊しているようです。

正規表現が正常に動作しています。新しいRegExpオブジェクトを反復ごとに作成するのではなく、配列if (botChat[i][0].test(message))で定義されているものを使用することをお勧めします。オーバーヘッドは少なくなります。

+0

それを調べていただきありがとうございます。ループはconsole.log()がなくても中断します。私は新しい変数を置き換え、単純なif/elseに変更しましたが、最初のオブジェクトを除いて、配列内の他のオブジェクト(ボットチャット)を一切通過しません – BenjiKemp

+0

(i = 0; i <= botChat { var length = botChat [i] .length - 1; {0}。 var index = Math.ceil(length * Math.random()); var reply = botChat [i] [index]; send_message(reply); リターン; } else { send_message( "わからない"); リターン; – BenjiKemp

関連する問題