11

重複の可能性:
Javascript:1つの値を複数の値と比較する最も美しい方法
JavascriptIfステートメントを使用してファイル拡張子が機能していないことを確認する

JSで、拡張子が「png」「jpg」または「gif」で終わるかどうかを確認しようとしています。ifこれはswitchステートメントで実行できることは承知していますが、すべてを条件付きでスローするより簡単な方法があるかどうか疑問に思っています。好き:

    if (aExtensions[i].toLowerCase() == ('jpg' || 'png' || 'gif')) {}

これを達成するための最良の方法は何ですか?

4

4 に答える 4

13

次のような配列を使用できます。

var extensions = ["jpg", "png", "gif"];

if (extensions.indexOf(aExtensions[i].toLowerCase()) > -1) {
    // match
}

この場合、「有効な」拡張機能を保存します。indexOf次に、のメソッドを使用してArray、配列内のアイテムのいずれかが、探している特定の拡張子と一致するかどうかを確認できます。つまり0、以上の値をチェックします。

indexOf古いブラウザではサポートされていないため、バックアップするにはポリフィルを含める必要があります。そのためのいくつかの解決策があります。

もちろん、ifステートメントのみを使用したい場合は、次の形式を使用できます。

var ext = aExtensions[i].toLowerCase();
if (ext == "jpg" || ext == "png" || ext == "gif") {
    // match
}

私が考えることができる別の可能性はswitch、次のようなステートメントです。

var ext = aExtensions[i].toLowerCase();

switch (ext) {
    case "jpg":
    case "png":
    case "gif":
        // match
        break;
    case default:
        // No match
}

私はそれを含めるほうがよいかもしれませんが(他の答えが最初にそれを持っていたのは間違いありません)、私が考えることができるもう1つは、次のような正規表現を使用することです。

if (/jpg|png|gif/i.test(aExtensions[i])) {
    // match
}

ただし、拡張機能を個別に元に戻すことはできないことに注意してください。そのため、最初の2つのオプションのいずれかを選択します。

于 2012-12-19T01:22:53.133 に答える
3

正規表現はどうですか?

if ( /jpg|png|gif/i.test( aExtensions[i] ) ) {
  ...
}
于 2012-12-19T01:26:01.337 に答える
2

これを行うさらに別の方法は、次のようなオブジェクトリテラルを使用することです。

if ({'jpg':1,'png':1,'gif':1}[aExtensions[i].toLowerCase()]) {
    // ...
}

このようにして、匿名オブジェクトに。{'jpg':1,'png':1,'gif':1}によってtrueになるプロパティがあるかどうかを確認しifます。1これを満たしてundefinedいません。


オブジェクトを使用している場合は、オブジェクトにその値とは関係のないキーがあるかどうかを示すin演算子( Ianが指摘)を使用することもできます。true

if (aExtensions[i].toLowerCase() in {'jpg':0,'png':1,'gif':2}) {
    // ...
}

今回'jpg'は、'jpg':0

于 2012-12-19T01:27:34.433 に答える
1

変数とトリプルの比較を使用することもできますが、それは醜いです。

または、配列を使用して、文字列が配列に含まれているかどうかを確認することもできます。

if (~ ["jpg", "png", "gif"].indexOf(aExtensions[i].toLowerCase()) …

それでも、複雑な!= -1比較と古いIEのネイティブの欠如のためにindexOf、人々は正規表現を使用する傾向があります。

if (/jpg|png|gif/i.test(aExtensions[i])) …
于 2012-12-19T01:26:40.767 に答える