3

私はここでかなり多くの質問を検索しましたが、私の請求に合うと思う質問は見つかりませんでした。知っている場合は、それにリンクしてください。

特定の番号を検索したい配列があり、その番号が配列に含まれている場合はアクションを実行し、そうでない場合は別のアクションを実行します。

私はこのようなものを持っています

var Array = ["1","8","17","14","11","20","2","6"];

for(x=0;x<=Array.length;x++)
{
    if(Array[x]==8)
        then change picture.src to srcpicture1
    else
        then change picture.src to srcpicture2
}

ただし、これにより配列の長さが実行され、配列の最後の要素がチェックされ、最後の要素が8ではないため、画像がpicture2に変更されます。

これで、これが発生する理由がわかりました。配列に特定の数値が含まれているかどうかを確認する方法については、まったくわかりません。

前もって感謝します。

4

5 に答える 5

7

あなたができることは、要素が配列に属しているかどうかをチェックする関数を自分で書くことです。

function inArray(array, value) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] == value) return true;
    }
    return false;
}

そして、ただやる:

var arr = ["1","8","17","14","11","20","2","6"];
if (inArray(arr, 8)) {
    // change picture.src to srcpicture1
} else {
    // change picture.src to srcpicture2
}

それは私にとってはるかに読みやすいです。


追加のポイントについては、次のように配列プロトタイプに関数を追加できます。

Array.prototype.has = function (value) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === value) return true;
    }
    return false;
};

そして、呼び出しは

if (arr.has(8)) // ...

これをさらに推し進めるindexOf()と、配列のメソッドをチェックして、使用しない場合は、上記のコードに置き換えることができます。


PSArray変数名は実際の配列型用に予約されているため、使用しないでください。

于 2009-11-25T09:47:21.483 に答える
3

正しい番号を見つけたら、ループを中止しないのはなぜですか。

for(x=0;x<=Array.length;x++)
{
    if(Array[x]==8) {
        //change picture.src to srcpicture1
        break;
    }
}
于 2009-11-25T09:43:38.147 に答える
0

一意のキーがあり、検索の高速化が非常に重要な場合は、配列の代わりにマップを使用することを検討できます(配列を使用するというハードバウンドの場合は、もちろん機能しません)。マップを使用する場合は、「if(num in arr)」をチェックするだけです。

于 2009-11-25T10:16:07.107 に答える
0

最初に配列を並べ替えてから、配列内に数値が存在する場合に限り、その配列をチェックすることができます。

于 2009-11-25T09:44:55.617 に答える