Как совместить разные условия в JavaScript? - PullRequest
0 голосов
/ 12 июня 2019

Итак, я строю одну игру, которая поливает поле в соответствии с выбранным цветом, и у меня есть 4 различных условия:

let condition1 = drenchX + 1 === mixedX && drenchY === mixedY && this.mixedFields[i].style.backgroundColor === this.service.clickedColor;
let condition2 = drenchX  === mixedX && drenchY + 1 === mixedY && this.mixedFields[i].style.backgroundColor === this.service.clickedColor;
let condition3 = drenchX - 1 === mixedX && drenchY === mixedY && this.mixedFields[i].style.backgroundColor === this.service.clickedColor;
let condition4 = drenchX === mixedX && drenchY - 1 === mixedY && this.mixedFields[i].style.backgroundColor === this.service.clickedColor;

Мне нужно получить все возможные комбинации этих условий, все 4 из них могут быть истинными, либо 3 или 2, либо только одна. Это отлично работает, но я думаю, что это слишком долго. Мое утверждение if выглядит так:

if((condition1 && condition2 && condition3 && condition4) || (condition1 && condition2 && condition3) || (condition1 && condition2 && condition4) || (condition1 && condition3 && condition4) || (condition2 && condition3 && condition4) || (condition1 && condition2) || (condition1 && condition3) || (condition1 && condition4) || (condition2 && condition3) || (condition2 && condition4) || (condition3 && condition4) || condition1 || condition2 || condition3 || condition4) {
// some action
}

Все работает отлично, но я ищу более короткое решение, и я все еще новичок в этом. Так что, если кто-нибудь знает лучший способ сделать это, это было бы замечательно, мое заявление слишком длинное и выглядит не очень хорошо. Кстати, проект в Angular. Может быть, создать какую-то функцию для этого?

Ответы [ 3 ]

2 голосов
/ 12 июня 2019

Если a && b верно, то a || b также верно.Тем не менее, это означает, что ваше состояние может быть

if (condition1 || condition2 || condition3 ||  condition4)
0 голосов
/ 12 июня 2019

Спасибо всем за советы, но я нашел способ упростить это.Я сохранил условия в массиве и использовал for-in для циклического выполнения всех возможных условий.

let conditionalArray: boolean[] = [condition1, condition2, condition3, condition4];

for(let c in conditionalArray){
  if(conditionalArray[c]) {
       //....
  }
}
0 голосов
/ 12 июня 2019

Если я правильно понимаю, оператор if проверяет, выполняется ли какое-либо из условий.Таким образом, это должно сделать трюк:

if(condition1 ||
    condition2 ||
    condition3 ||
    condition4)
 {
   //some action
 }
...