我有一个数组中的关键字列表,当用户正确键入其中一个关键字时,我运行了pass()函数。我检查用户在键入每个键后键入的内容(在键上)是否等于数组中的任何内容。
我在每个键上执行此操作,使用for循环遍历数组,如果它匹配数组中的item,则运行pass函数,但如果它长度或等于长度且不相等到数组中的一个项目并且已到达数组的末尾然后运行失败函数。
这是我的代码:
var keywords = new Array('', 'help', 'search', 'clock', 'folio', 'pong', 'simon');
for(var i=0; i<=(keywords.length)-1; i++){
if($('#code').val()===keywords[i]){
pass(i);
}
else if(($('#code').val().length>=keywords[i].length) && (i === (keywords.length)-1)){
fail();
}
}
现在,我遇到的问题是过早的fail()执行。当用户键入其中一个较长的关键字时,会执行比较短的关键字之一更长的失败的时刻。
另外,对于一些关于输入“帮助”和“搜索”的研究,无论是通过还是失败?
无论如何,我想知道是否有一种方法可以更好地改进我的代码,以便我正在尝试做什么并正常工作?
是否可以检查用户输入的内容是否与其中一个关键字匹配,如果看起来他们正在拼写其中一个关键字,那么就不会失败(),但是当他们陷入困境并拼出某些东西时等于长度,但不是关键字然后失败()。
例如:sear会导致我之前的代码失败,但在我现在尝试做的事情中,直到用户输入类似searck的内容。
答案 0 :(得分:2)
当fail()
循环完成且没有任何匹配时,您只需要调用for
。
我无法用else if
逻辑告诉你要完成什么。这是仅在没有匹配时调用fail()
的版本。为了提高效率,它还会从$('#code').val()
循环中取出for
,并在找到匹配项时突破for
循环,因为没有理由继续。
var keywords = new Array('', 'help', 'search', 'clock', 'folio', 'pong', 'simon');
var val = $('#code').val();
var fullMatch = false, partialMatch = false;
for (var i = 0; i < keywords.length; i++) {
if (val === keywords[i]) {
fullMatch = true;
pass(i);
break;
} else if (val && !partialMatch) {
if (keywords[i].indexOf(val) === 0) {
partialMatch = true;
}
}
}
if (!fullMatch && !partialMatch) {
fail();
}