2016-10-07 3 views
0

Gibt es eine Möglichkeit, den Ausdruck if zu verkürzen, ohne eine neue Variable einzuführen?Wie würde ich diesen strikten Gleichheitsausdruck stempeln

if ((c2 === 'RED') || (c2 === 'GREEN') || (c2 === 'BLUE')) { 
return true; 
} else { 
return false 
} 

dachte ich, es so etwas wie wäre: if ((c2 === ('RED'|| 'GREEN' ||'BLUE')))

+0

Nein, Ihr Original ist das Beste, was Sie mit Vergleichsoperatoren tun können. Eine Alternative wäre, die Werte als Eigenschaftsnamen in einem Objekt einzurichten und 'c2' als Eigenschaftsnamen zu testen. – Pointy

Antwort

2

Array.indexOf tut strenge Kontrolle, so dass Sie

if (['RED','GREEN','BLUE'].indexOf(c2) !== -1) {... 

tun könnte und wie es bereits einen Booleschen Wert zurück, könnten Sie einfach zurückgeben direkt ohne die Bedingung

+2

Golf'd: '['ROT', 'GRÜN', 'BLAU']. Beinhaltet (c2)' –

+0

Golfen mehr 'neues Set (['ROT', 'GRÜN', 'BLAU']). Hat (c2) ' – adeneo

1

Sie können es verkürzen, indem Sie die Tatsache ausnutzen, dass der Vergleich isons geben Sie boolean Ergebnisse, so dass Sie keine explizite return mit den Booleschen Wert benötigen:

return ((c2 === 'RED') || (c2 === 'GREEN') || (c2 === 'BLUE')); 

Sie auch ein Objekt machen können:

var targets = { RED: 1, GREEN: 1, BLUE: 1 }; 
return !!targets[c2]; // !! turns the 1 into true 

(Sie true im Objekt nutzen könnten, um Vermeiden Sie die !!.)

+2

Die Variable ist nicht notwendig:' return !! {RED: 1, GRÜN: 1, BLUE: 1} [c2]; 'aber das wird ziemlich schwer zu lesen. – 4castle

+3

oder 'c2 in {ROT: 1, GRÜN: 1, BLAU: 1}' – adeneo

+0

IMO mit einem Array scheint hier einfacher, da 'includes' oder' indexOf' return boolean (ish, truthy/falsy auf indexOf) ist einfacher als eine doppelte NOT-Operation. Das bedeutet nicht, dass Sie nicht falsch liegen, nur verschiedene Methoden, alle arbeiten –

Verwandte Themen