if else阻止循环通过对象

时间:2017-09-26 16:00:51

标签: javascript jquery arrays regex

当我的RegExp找不到匹配项时,我无法返回语句:

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

1 个答案:

答案 0 :(得分:0)

我检查了你的codepen,第190和194行console.log(send_message().val());似乎打破了循环,因为这些行引发异常,因为send_message()返回undefinedundefined没有.val()方法。

你的正则表达式工作正常。我建议不要每次迭代都创建新的RegExp对象,而是使用数组if (botChat[i][0].test(message))中定义的对象,开销会更少。