我有一个我正在制作的剧本,我有点迷失。
我获取用户输入(使用jQuery)然后循环遍历数组并查看用户输入中是否存在数组中的短语。如果发现我正在弹出一个警告框告诉他们找到它。但由于某种原因,它不起作用。
代码:
submit = false;
for(i in keyphrases_array) {
if(english_text.indexOf(keyphrases_array[i]) != -1) {
if(trans_text.indexOf(keyphrases_array[i]) != -1) {
submit = false;
}
} else {
submit = true;
}
}
keyphrases_array
是一个在另一个函数中设置的全局数组。
示例:
如果在我的数组中我有短语“Hello World”并且我的脚本在english_text
变量中找到Hello World,那么它会检查用户提交的文本(trans_text
)。如果在trans_text
中找不到该短语,则该脚本应返回false。
答案 0 :(得分:3)
首先,不应使用for/in
迭代数组。使用普通的for
循环。
问题很可能是submit
的值被循环中的下一次迭代覆盖。如果那是函数的结尾,你应该立即返回。
submit = false;
for(var i = 0; i < keyphrases_array.length; i++) {
if(english_text.indexOf(keyphrases_array[i]) != -1) {
if(trans_text.indexOf(keyphrases_array[i]) != -1) {
// return immediately
return false;
}
} else {
submit = true;
}
}
return submit;
或者如果需要更多处理,你可以打破循环:
submit = false;
for(var i = 0; i < keyphrases_array.length; i++) {
if(english_text.indexOf(keyphrases_array[i]) != -1) {
if(trans_text.indexOf(keyphrases_array[i]) != -1) {
submit = false;
break;
}
} else {
submit = true;
}
}
编辑:根据您的评论,如果return false
中的文字不,您似乎想要trans_text
。这意味着测试应该使用==
而不是!=
。
if(trans_text.indexOf(keyphrases_array[i]) == -1) {
// return immediately
return false;
}
答案 1 :(得分:1)
如果文本仅在英文版本中,则前面的代码将返回true,如果两者都存在,则只需传递true。 - 我理解正确吗?
submit = false;
for(i in keyphrases_array) {
if(english_text.indexOf(keyphrases_array[i]) != -1 && trans_text.indexOf(keyphrases_array[i]) != -1) {
submit = true;
}
} else {
submit = false;
}
}
编辑:切换true / false以匹配问题