Javascript if 语句在 for 循环中

Javascript if statement in for loop

本文关键字:循环 for if 语句 Javascript      更新时间:2023-09-26

请帮助我理解为什么我的代码没有按照我期望的方式做出反应?

所以我正在迭代 for 循环中的值列表,然后如果它们与表单提交的值匹配,它应该返回该值,如果不匹配,它应该返回 -1。如果我在 if 条件中省略了"else"语句,它可以工作(如果没有匹配的值,显然不会返回 -1)。但是对于 else,如果输入了第一个值(在本例中为 10),它只会返回第一个值,否则它将始终返回 -1。(就像如果我输入 20,它将返回 -1,即使它在我的值列表中)

我在这里错过/不理解什么?

// reference the form
var myForm = document.getElementById('findValue');
// our list of random values
var values = [10,20,30,40,50,60,70,80,90,100,234,255,345,366,900,1000,1002,1025,2034];
// on form submit
myForm.onsubmit = function(evt) {
var valueToFind = document.getElementById('myValue').value;
    // do not let it refresh the page/send a query
    evt.preventDefault();
    for(var i = 0; i < values.length; i++) {
        if(valueToFind == values[i]) {
            alert(values[i]);
        }
        else {
            alert(-1);
            return false;
        }
    }
};

非常感谢!

你不会让它搜索到最后。第一次没有匹配时,它会返回。

找到匹配项后,应立即发出警报,并返回true以允许提交。如果没有匹配项,则在循环后返回false

myForm.onsubmit = function(evt) {
    var valueToFind = document.getElementById('myValue').value;
    // do not let it refresh the page/send a query
    evt.preventDefault();
    for(var i = 0; i < values.length; i++) {
        if(valueToFind == values[i]) {
            alert(values[i]);
            return true;
        }
    }
    alert(-1);
    return false;
};

编辑:你的问题使用工作return,当我认为你的意思是别的东西。

在看完第一项后,你总是以一种或另一种方式返回。 如果第一个不数学,你必须继续循环:

for(var i = 0; i < values.length; i++) 
{
    if(valueToFind == values[i]) 
    {
        alert(values[i]);
        return values[i];
    }
}
// only return false after the loop is complete with no match.
alert(-1);
return false;

return false将结束循环,即使没有,您也会为每个不是输入的项目发出-1警报。

对于这种搜索,您应该检查条件是否为真,此时您对其进行操作并return,并省略else。然后,您在for循环之后执行"如果它们都不匹配"代码。

发生这种情况是因为当找到时,您应该中断循环而不是接下来迭代,而当找不到时,循环不应与return false中断。

但是,在您的情况下,我会在循环后使用标志found和标志检查:

var found = false;
for (var i = 0; i < values.length; i++) {
    if (valueToFind === values[i]) {
        found = true;
        break;
    }
}
alert(found ? valueToFind : -1);

另一种简短的方法是使用Array.indexOf方法:

alert(values.indexOf(valueToFind) > -1 ? valueToFind : -1);