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
Sunil 13 Aug. 2015 im 21:06

6 Antworten

Beste Antwort

Warum nicht die includes Funktion von lodash?

var val = 's';
var criterion = ['s','b','g','p','z'];
_.includes(criterion, val);

Gibt true zurück;

0
George Stocker 13 Aug. 2015 im 18:09

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 dafür:

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.

4
ssube 13 Aug. 2015 im 18:07

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]();
1
Nina Scholz 13 Aug. 2015 im 18:33

Sie können auch Javascript .includes() verwenden Helfer.

Die Methode includes() bestimmt, ob ein Array ein bestimmtes enthält Element, das je nach Bedarf true oder false 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
2
Roel 25 Jän. 2018 im 03:26

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
1
Wolf 13 Aug. 2015 im 18:13

Sie könnten so etwas tun:

var values = ['s','b','g','p','z'];

if (values.indexOf(value) > -1)
1
Kevin Boucher 13 Aug. 2015 im 18:08