を通過するためのループを防ぐ他の場合:私はフレーズを入力すると私の正規表現一致が見つからないときにオブジェクト
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です。
ここでは 'botChat'を表示していませんが、このコードは初期化ごとに1回実行する必要があるときに正規表現のコンパイルと再コンパイルに多くの時間を費やしているようです。 – tadman
'for(i = 0; i <= botChat.length; i ++)' botChat.lengthが最初の次元の長さを与える場合、インクリメントの 'i ++'を止めるforのブロック内には何もありません。 botChatは再割り当てされず、ループの変数 'i'も変更されません。どのような問題がありますか?他に追加できる唯一の場所はif(re.test(message)){} 'else {}' reはスコープ内のforブロックであるため、他にも問題があります。あなたは、ifブロックをコメントアウトして、各パスでループvar 'i'を表示することができます。 – sln
私が正しく理解していれば、最も簡単な解決策は 'send_message'を呼び出した後に' return'してループを処理し続けることです。ループの終了後、あなたの 'else'処理を行うことができます。私は '.val()'を呼び出す理由に従わないので、 'send_message'が何も返さなくても入力値にアクセスするjQueryメソッドをランダムに呼び出すようです。 – skirtle