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]

рони 30.08.2016 14:22

:-?

warren buffet 31.08.2016 06:03

Цитата:

Сообщение от ksa
экранировать некоторые символы

Хочу посмотреть на некоторые символы.

Ну сделай массив перевернув отождествление

admin:[1,2,3,4,5,6],ban:[7,8,9,10]

ЗЫ Народ на регах роутеры рисует, а у этих понимаешь идиосинкразия.

ksa 31.08.2016 08:46

Цитата:

Сообщение от warren buffet
Народ на регах роутеры рисует

Это их дело... И их конкретные примеры.

А разговор пошел про слова "обычный" и "логичный". :D

laimas 01.09.2016 01:55

Цитата:

Сообщение от ksa
Поскольку в общем случае придется экранировать некоторые символы и код станет менее читабельным.

Это не самая большая проблема такой глупости.


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