Лучший Ptarices / Нотация в es6 к условию с некоторыми (ИЛИ) - PullRequest
0 голосов
/ 03 мая 2018

Я ищу хорошие практики или обозначения для таких условий:

    if ( el.type === 'state' || el.type === 'status' || .... )  {
    // process 
    }

Я могу использовать как это, но мне нужно посоветовать

 function isValid() {
    let arr = ['state', 'status', '...']
    if ( arr.include( el.type ) {
    // process
    return true
    }
    return false
}

 function isValid() {
return el.type === 'state' 
      || el.type === 'status' 
      || ... 
}

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Вы должны использовать оператор switch вместо условия if, похожего на:

Посмотрите этот пример здесь на Js Bin: https://jsbin.com/takadoq/edit?js,console

Это просто оператор переключения:

  switch(el.type) {
    case 'state':
    case 'status':
      return true
      break;
    default:
      return false
  }

Подробнее о корпусе переключателя: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch

0 голосов
/ 03 мая 2018
if (['state', 'status', '...']).includes(el.type)) ...

- более читаемый способ, который уже упоминался, но только в ES2016 и выше.

Способ сделать это в ES5 и ES6 :

if (['state', 'status', '...']).indexOf(el.type) >= 0) ...

Это обеспечивает крошечные накладные расходы на el.type === 'state' || el.type === 'status' || ... условие, которое можно считать приемлемым, если только код не критичен к производительности.

0 голосов
/ 03 мая 2018

Если вы хотите, чтобы ваш код был читабельным, спрячьте такие сложные случаи в методах предикатов:

if (el.isStatus()){
    // process
}

тогда всей этой сложностью легче управлять, потому что вам не нужно помещать все это в одну строку:

el.isStatus = function(){
    if (this.type === 'state') return true;
    if (this.type === 'status') return true;
    ...
    return false; // default
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...