Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   if упростить (https://javascript.ru/forum/misc/64676-if-uprostit.html)

zbara 28.08.2016 23:47

if упростить
 
Есть вот такое условие:

if(contacts.type == 3 || contacts.type == 4 || contacts.type == 9 || contacts.type == 11 || contacts.type == 12 || contacts.type == 13){
			          template.admin(contacts); 
		           } else if (contacts.type == 1 || contacts.type == 5 || contacts.type == 6 || contacts.type == 7 || contacts.type == 8 || contacts.type == 10){
			         template.ban(contacts); 
 }


а возможно ли как-то упростить его, что например contacts.type == 3,4,9,11,12,13

рони 28.08.2016 23:59

zbara,
if([3,4,9,11,12,13].indexOf(contacts.type)> -1)

ksa 29.08.2016 10:27

Есть еще
http://javascript.ru/switch

switch (contacts.type) {
   case 3:
   case 4:
   case 9:
   case 11:
   case 11:
   case 12:
   case 13:
      alert('Ok');
};


Такой подход...

var obj={
	3: true,
	4: true,
	9: true,
	11: true,
	12: true,
	13: true
}
if(obj[contacts.type]) alert('Ok');


Ну и вариант с массивом, описанный выше. :)

warren buffet 30.08.2016 09:29

Массив это чрезвычайно, switch это уполномочено, обычный логичный метод - реги:


if(/3|4|9|11|12|13/.exec(contacts.type))

warren buffet 30.08.2016 09:39

А вообще вот так можно.

function test(v){
  var tT={
     '3|4|9|11|12|13':'admin',
     '1|5|6|7|10':'ban'
  };

  for(var t in tT)
     if(new RegExp(t).exec(v))
          return tT[t];
}

test(4);
/*
admin
*/


А если заменить return tT[t];

на return template[tT[t]](contacts);

то будет all in wonder )))

рони 30.08.2016 09:54

warren buffet,
код усложнили и замедлили

warren buffet 30.08.2016 09:57

Насколько медленнее стало?

warren buffet 30.08.2016 10:00

Любая абстракция усложняет, такова плата за следующий уровень. Зато харкодить не надо связи между тем и этим.

ksa 30.08.2016 11:35

Цитата:

Сообщение от warren buffet
обычный логичный метод - реги

Это как раз очень частный случай. :D
Поскольку в общем случае придется экранировать некоторые символы и код станет менее читабельным.

Vlasenko Fedor 30.08.2016 14:18

лучше массива (параметр) здесь нет ничего лучше, это довольно распространенная задача достаточно добавить диапазон c 11 по 33 усложнив при этом задачу
[3, 4, 9, [11, 33], 45]


Часовой пояс GMT +3, время: 10:00.