2013-01-08 8 views
6

Mögliche Duplizieren:
Check variable equality against a list of values
Javascript: Comparing SINGLE Value Against MULTIPLE Values with OR OperandsJavascript Formatierung, wenn die Bedingung

Zunächst einmal bin ich auf JavaScript-Seite neu. Bitte lassen Sie mich wissen, ob es eine einfache Möglichkeit gibt, den unten stehenden Code zu formatieren.

if(fileName== 'doc' || fileName=='docx' || fileName=='xls' || fileName=='xlsx' || fileName=='ppt' || fileName=='pdf'){ 

Do something 

} else{ 

    Do something 

} 
+1

Ich würde ein Array von möglichen Dateierweiterungen behalten und dann prüfen, ob der Wert in diesem Array war. – Brad

Antwort

10
var SUPPORTED_FILE_EXTENSIONS = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pdf']; 

if(SUPPORTED_FILE_EXTENSIONS.indexOf(fileName) != -1){ 
    //Do Something 
} else { 
    //Do Something Else 
} 

Array.indexOf() - Beachten Sie, dass dies auch Informationen über das Hinzufügen von Rückwärtskompatibilität Unterstützung für ältere Browser (d IE).

+0

Tnx @ briguy37 :). Es wird nett sein, wenn Sie das erklären 'FILE_SUPPORTED_EXTENSIONS.indexOf (fileName)! = -1' – user1817630

+3

Beachten Sie, dass 'indexOf' nicht von alten IEs unterstützt wird – Bergi

+1

SUPPORTED_FILE_EXTENSIONS ist das Array; .IndexOf prüft auf das Vorkommen einer Zeichenkette (Dateiname) und gibt ihre Indexposition zurück, es sei denn, sie wird nicht gefunden. Dann gibt sie -1 zurück. – Syon

1

Vielleicht ist switch Aussage eines der am schnellsten Optionen:

switch (fileName) { 
    case "doc": 
    case "docx": 
    ... 
     // ... 
    default: 
     // else 
} 
9
var validTypes = /docx?|xlsx?|ppt|pdf/; 

if (fileName.match(validTypes)) { 
    ... 
} 

Hinweis: das Fragezeichen, ?, im regulären Ausdruck zeigt das vorherige Zeichen optional ist, so dass es sowohl doc und docx mithalten kann das Rohr, | zeigt or so wird es doc oder xls usw. entsprechen

+0

Sehr nett, dachte nie, es mit Regex zu tun. Nicht so lesbar wie ein Array, aber ich mag es! +1 –

3

vielleicht so etwas wie

var filenames = ['doc','docx','xls','xlsx','ppt','pdf']; 
if(filenames.indexOf(fileName) >= 0) { 
    // Do something 
} else { 
    // Do something else 
} 
+0

Die lesbarste Art und Weise, verwenden Sie diese die ganze Zeit! +1 –

0

Sie es formatieren könnte der Code leichter lesbar machen:

if(fileName == 'doc' || 
    fileName == 'docx' || 
    fileName == 'xls' || 
    fileName == 'xlsx' || 
    fileName == 'ppt' || 
    fileName == 'pdf'){ 
    Do something 
} else{ 
    Do something 
} 

Alternativ könnten Sie den Code weniger machen sich wiederholende ein Konstrukt wie jQuery.inArray() oder array.indexOf() mit:

var arr = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pdf']; 
if (jQuery.inArray(fileName, arr) > -1){ 
    Do something 
} else{ 
    Do something 
} 
+0

Warum nicht das native 'indexOf'? –

+0

@JosephMarikle - Ich habe das gerade hinzugefügt. Entweder ist das in Ordnung, da er jQuery benutzt (oder zumindest die Frage als solche markiert hat), also kommt es auf persönliche Vorlieben an. –

0

Das Erstellen des Arrays ist einfacher zu lesen. Verwenden Sie außerdem die $ .inArray() -Methode von jQuery. Es funktioniert genau wie .indexOf() mit dem zusätzlichen Vorteil, dass es mit älteren Versionen von IE kompatibel ist, die viele fehlende Array-Funktionen haben.