0

私のコードが期待どおりに反応しない理由を理解するのを手伝ってください。

したがって、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;
        }
    }

};

どうもありがとう!

4

4 に答える 4

3

最後まで検索させません。初めて一致しない場合は、戻ります。

一致が見つかったらすぐに警告し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が何か他のことを意味していると思うときに作品を使用しています。

于 2013-01-22T22:23:39.387 に答える
0

最初のアイテムを見た後、あなたは常に何らかの方法で戻ってきます。最初のものがmathcでない場合は、ループを継続する必要があります。

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;
于 2013-01-22T22:23:22.003 に答える
0

return falseループを終了します。そうでない場合でも、-1入力されたものではないすべてのアイテムに対してアラートを送信します。

この種の検索では、条件が真であるかどうかを確認する必要があります。その時点で、それを使用して何かを実行しreturn、を省略しelseます。次に、ループのに「一致するものがない場合」のコードを実行します。for

于 2013-01-22T22:23:29.840 に答える
0

これが発生するのは、見つかった場合はループを中断し、次に反復しない必要があるためです。一方、見つからない場合はループを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);
于 2013-01-22T22:25:06.557 に答える