Ich habe JavaScript-Code in meiner App, der Werte unter Verwendung der OR-Bedingung (||) wie im folgenden Code-Snippet überprüft. Die Anzahl der OP-Bedingungen ist in den meisten meiner Codes nicht gering.
Frage : Gibt es eine Möglichkeit, den Code mit vielen mehreren ODER-Bedingungen präziser zu gestalten, indem Sie Folgendes verwenden: value IN ('s','b','g','p','z')
? Ich war an etwas interessiert, das einer IN-Klausel so nahe wie möglich kommt.
if(value === "s" || value === "b" || value === "g" || value === "p" || value === "z") {
//do something
}
6 Antworten
Warum nicht die includes
Funktion von lodash?
var val = 's';
var criterion = ['s','b','g','p','z'];
_.includes(criterion, val);
Gibt true
zurück;
Am einfachsten ist es, ein Array gültiger Werte zu erstellen und dann sicherzustellen, dass sich Ihr Wert in dieser Liste befindet. Sie können die indexOf
-Methode
var allowed = ['s', 'b', 'g', 'p', 'z'];
if (allowed.indexOf(value) !== -1) {
// do something
}
Der ES6-Standard führt Sets ein, die ein {{ X0}} -Methode, um ähnliche Aktionen für eindeutige Werte auszuführen.
Dies funktioniert für Zeichenfolgen, Zahlen und andere einfache Nicht-Objektwerte. Der Vergleich von Objekten mit ===
ist nur erfolgreich, wenn das Array / Set bereits genau dasselbe Objekt enthält.
Eine Lösung für einzelne Zeichen:
var value = 'g';
if (~'sbgpz'.indexOf(value)) {
document.write(value + ' found');
}
Eine Lösung für Zeichenfolgen:
var value = 'go';
if (~['so', 'bo', 'go', 'po', 'zo'].indexOf(value)) {
document.write(value + ' found');
}
Eine Lösung für Objekteigenschaften:
var value = 'go';
var toDo = {
so: function () { document.write('prop so found'); },
go: function () { document.write('prop go found'); }
};
value in toDo && toDo[value]();
Sie können auch Javascript .includes()
verwenden Helfer.
Die Methode
includes()
bestimmt, ob ein Array ein bestimmtes enthält Element, das je nach Bedarftrue
oderfalse
zurückgibt.
var array1 = [1, 2, 3];
console.log(array1.includes(2));
// expected output: true
var pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: false
In JavaScript gibt es tatsächlich ein in
, das genau für Ihren Fall verwendet werden kann. Erstellen Sie ein Wörterbuch mit beliebigen Werten, verwenden Sie jedoch Ihre zulässigen Buchstaben als Schlüssel:
allowed = { 's':true, 'b':true, 'g':true, 'p':true, 'z':true };
Jetzt können Sie den in
-Test direkt verwenden (und effizienter als eine Suche in einer Liste). Hier von meiner JavaScript-Konsole kopiert:
's' in allowed
true
'q' in allowed
false
Sie könnten so etwas tun:
var values = ['s','b','g','p','z'];
if (values.indexOf(value) > -1)