javascript - Kortare sätt att kontrollera flera eller-villkor


Finns det något enklare sätt att kontrollera värdet på en variabel mot flera andra? För närvarande använder jag kod som detta:

if(a[i] == a[i-13] || a[i] == a[i+13] || a[i] == a[i-1] || a[i] == a[i+1]){
  //my code
}

Finns det nu ett kortare sätt att göra detta? Jag vet att jag kan använda en switch, men då skulle jag behöva skriva min funktion flera gånger. Finns det ett enklare sätt att göra detta?

Svar #1

Du behöver inte skriva din funktion flera gånger med en switch:

switch(a[i]){
  case a[i-13]:
  case a[i+13]:
  case a[i-1]:
  case a[i+1]:
    // This code will run if any of the above cases are true.
}

Roligt nog är detta dock ungefär samma antal tecken (beroende på hur du formaterar det). Ett switch-uttryck är i allmänhet mindre kraftfullt än ett explicit if-uttryck, men i det här fallet tycker jag att det är tydligare och mindre benäget för fel.

Svar #2

Och ännu bättre:

if (matchesAdjacent(a, i)) {
    // etc.
}

Flytta logiken ur huvudkoden till en metod med ett lämpligt namn.

Detta låter dig också göra din gränskontroll där (om det inte redan är garanterat någon annanstans).