给出的是res[]
:
for(let k = 0; k < res.length; k++){
if($("#getData").val().length == 20){
//if ((res[k]) != $("#getData").val()) helpText = "No match!";
// -- Tried this too and a several other options - foreach, else, else if e. g.
if(!((res[k]) == $("#getData").val()))
resText = "No match!";
if((res[k]) == $("#getData").val())
resText = "Success!";
$("#result").html(resText);
}
}
如果定义了!((res[k]) == $("#getData").val())
-“ false
”条件,它将始终仅使数组中的第一个res[0]
项有效。此项可能会正确证明-数组不会迭代。
如果未未定义-“ false
”条件,则仅定义“ true
”条件即可正常工作。但是这样就没有resText == "No match!";
怎么了...?
答案 0 :(得分:1)
如@charlietfl所述,您正在遍历数组并更新每个索引处的结果文本。因为您从未停止过循环过程,所以这实际上意味着您只能从数组中的最后一项获得结果。如果您的“成功!”值是20个项目数组中的第14个项目,您的结果将匹配并通过该迭代,但随后的5个项目的迭代将被覆盖。如果最后一项是成功条件,您将始终获得“成功!”。如果没有,您将始终得到“无匹配!”不管列表中的其他项目。
我的假设是,您要确定的是确定数组中的一项是否匹配,如果匹配,则您希望“成功!”作为输出。如果是这样,我建议:
const success = false;
const getDataVal = $("#getData").val();
if (getDataVal.length == 20) {
for(let k = 0; k < res.length; k++) {
if (res[k] == getDataVal) {
success = true;
break;
}
}
}
$("#result").html(success ? "Success!" : "No match!");
我在这里对您的代码进行了一些重组,以帮助我理解它。请注意,我对此做了一些优化:
如果我的假设是正确的,即您真的有兴趣知道数组中的任何项是否匹配,那么我建议使用数组的some方法对其进行评估。这更具表现力,并且不需要循环结构。
let success = false;
const getDataVal = $("#getData").val();
if (getDataVal.length == 20) {
success = res.some(function (val)) {
return val == getDataVal;
});
}
$("#result").html(success ? "Success!" : "No match!");