Ich überprüfe beispielsweise eine Variable foo
auf Gleichheit mit einer Reihe von Werten. Beispielsweise,
if( foo == 1 || foo == 3 || foo == 12 ) {
// ...
}
Der Punkt ist, dass es ziemlich viel Code für solch eine triviale Aufgabe ist. Ich habe mir Folgendes ausgedacht:
if( foo in {1: 1, 3: 1, 12: 1} ) {
// ...
}
aber auch das spricht mich nicht ganz an, weil ich den Elementen im Objekt redundante Werte geben muss.
Kennt jemand einen vernünftigen Weg, um eine Gleichheitsprüfung gegen mehrere Werte durchzuführen?
javascript
pimvdb
quelle
quelle
Antworten:
Sie könnten ein Array verwenden und
indexOf
:quelle
indexOf
erst seit der 5. Ausgabe von ECMAScript verfügbar ist.In ECMA2016 können Sie die Includes- Methode verwenden. Es ist der sauberste Weg, den ich je gesehen habe. (Unterstützt von allen gängigen Browsern außer IE (Polyfill befindet sich im Link)
quelle
if([a,b,c].includes(foo))
oder Stringsif(['a','b','c'].includes(foo))
if([a,b,c].includes(foo))
da Anführungszeichen es zu einer Zeichenfolge machen. @HastigZusammenstellenMit den Antworten kam ich zu folgendem Ergebnis:
Es kann wie folgt aufgerufen werden:
Bearbeiten: Ich bin in letzter Zeit auf diesen 'Trick' gestoßen, der nützlich ist, wenn die Werte Zeichenfolgen sind und keine Sonderzeichen enthalten. Denn Sonderzeichen werden durch Flucht hässlich und sind dadurch auch fehleranfälliger.
Genauer gesagt überprüft dies die genaue Zeichenfolge, ist jedoch für einen einfachen Gleichheitstest komplizierter:
quelle
in
ist ein Schlüsselwort in Javascript. Zum Beispiel führt das Ausführenfunction in() {}; in()
zu einem Syntaxfehler, zumindest in Firefox, und ich bin mir nicht sicher, warum Ihr Code dies nicht tut. :-)Object.prototype
, da es sich auffor (foo in bar)
unglückliche Weise auswirkt . Vielleicht ändern Sie esfunction contains(obj) { for (var i = 1; i < arguments.length; i++) if (arguments[i] === obj) return true; return false; }
und übergeben Sie das Objekt als Argument?Object.prototype
wie Sie auch erwähnen. Ich bevorzuge jedoch diesen Weg, da die Notation für die Überprüfung sehrfoo.in(1, 2, "test", Infinity)
einfach ist.in()
das normale Definieren einer Funktion schlägt auch in Chrome fehl, aber der Prototyp funktioniert ... :)Sie können schreiben,
if(foo in L(10,20,30))
wenn Sie definieren,L
zu seinquelle
'remove' in L(1, 3, 12)
, obwohl Sie dies nicht getan haben Geben Sie 'remove' an, das in die Liste aufgenommen werden soll.Dies ist leicht erweiterbar und lesbar:
Aber nicht unbedingt einfacher :)
quelle
Beachten Sie, dass indexOf nicht im Kern-ECMAScript enthalten ist. Sie benötigen ein Snippet für IE und möglicherweise andere Browser, die Array.prototype.indexOf nicht unterstützen.
quelle
Da die Werte, anhand derer Sie das Ergebnis überprüfen, alle eindeutig sind, können Sie auch Set.prototype.has () verwenden .
quelle
Jetzt haben Sie vielleicht eine bessere Lösung, um dieses Szenario zu lösen, aber auf eine andere Weise, die ich bevorzugt habe.
Ich habe die obige Lösung der indexOf-Prüfung vorgezogen, bei der Sie auch den Index überprüfen müssen.
enthält Dokumente
quelle
Ich mochte die akzeptierte Antwort, dachte aber, es wäre ordentlich, wenn sie auch Arrays aufnehmen könnte, und erweiterte sie folgendermaßen:
Sie können durch Änderung Typ Zwang entfernen
==
zu===
.quelle
Wenn Sie Zugriff auf Unterstrich haben, können Sie Folgendes verwenden:
contains
Früher auch in Lodash gearbeitet (vor V4), jetzt müssen Sie verwendenincludes
quelle
Dies ist eine kleine Helfer-Arror-Funktion:
Mehr Infos hier ...
quelle
const valToCheck = 'E'; const check = ['A', 'B', 'C', 'D'].some(option => option === valToCheck); // false
includes
optimieren, habe ich festgestellt, dass dies die bessere Option ist, wie in der Antwort von @ alister:const valToCheck = 'E'; const check = ['A', 'B', 'C', 'D'].includes(valToCheck); // false
Ich habe einfach die jQuery inArray- Funktion und ein Array von Werten verwendet, um dies zu erreichen:
quelle
Für die Nachwelt möchten Sie möglicherweise reguläre Ausdrücke als Alternative verwenden. Ziemlich gute Browserunterstützung (siehe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match#Browser_compatibility )
Versuche dies
quelle