Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2016, 23:47
Новичок на форуме
Отправить личное сообщение для zbara Посмотреть профиль Найти все сообщения от zbara
 
Регистрация: 26.08.2016
Сообщений: 7

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
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2016, 23:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

zbara,
if([3,4,9,11,12,13].indexOf(contacts.type)> -1)
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2016, 10:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Есть еще
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');


Ну и вариант с массивом, описанный выше.
Ответить с цитированием
  #4 (permalink)  
Старый 30.08.2016, 09:29
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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


if(/3|4|9|11|12|13/.exec(contacts.type))
Ответить с цитированием
  #5 (permalink)  
Старый 30.08.2016, 09:39
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

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 )))
Ответить с цитированием
  #6 (permalink)  
Старый 30.08.2016, 09:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

warren buffet,
код усложнили и замедлили
Ответить с цитированием
  #7 (permalink)  
Старый 30.08.2016, 09:57
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Насколько медленнее стало?
Ответить с цитированием
  #8 (permalink)  
Старый 30.08.2016, 10:00
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Любая абстракция усложняет, такова плата за следующий уровень. Зато харкодить не надо связи между тем и этим.
Ответить с цитированием
  #9 (permalink)  
Старый 30.08.2016, 11:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от warren buffet
обычный логичный метод - реги
Это как раз очень частный случай.
Поскольку в общем случае придется экранировать некоторые символы и код станет менее читабельным.
Ответить с цитированием
  #10 (permalink)  
Старый 30.08.2016, 14:18
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите упростить код открывания панелей Anrew Общие вопросы Javascript 18 14.11.2015 22:15
Упростить код Decode Элементы интерфейса 6 16.06.2015 01:10
Упростить код Nifler Общие вопросы Javascript 4 12.06.2015 17:29
Как упростить функцию makissm21 Общие вопросы Javascript 5 20.03.2015 08:36
Помогите упростить скрипт. operatorr Ваши сайты и скрипты 6 05.01.2010 12:57