1

Javascript: Снизить цикломатическую сложность

function(response) { 
 
    if (response.bMap && SelType === 'q') { 
 
    setDefaultQQ(response.bMap); 
 
    } else if (response.bMap && SelType === 'a') { 
 
    setDefaultAA(response.bMap); 
 
    } else if (response.bMap && SelType === 'o') { 
 
    setDefaultOO(response.bMap); 
 
    } else if (response.mMap && SelType === 'm') { 
 
    setDefaultMM(response.mMap); 
 
    } else if (response.bMap && SelType === 'p') { 
 
    setDefaultPP(response.bMap); 
 
    } else if (response.eMap && SelType === 'e') { 
 
    setDefaultEE(response.eMap); 
 
    } else { 
 
    setDefaultData(); 
 
    showModal(); 
 
    } 
 
}

Есть ли способ уменьшить этот условный оператор в короткую форму и лучшую читаемость

+0

Не совсем связаны, но это вопросы, кажется, конфликтовать с вашим профилем только немного;). – Teemu

ответ

0

Существует не очень хороший способ, но как об этом

eval("setDefault"+SelType.toUpperCase()+SelType.toUpperCase()+"(response."+SelType.toUpperCase()+"Map);");

Но, конечно, не самый лучший способ.

+0

Интересно видеть, что это можно сделать таким образом, но, пожалуйста, не используйте 'eval()', если вам действительно не нужно (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Eval # Don't_use_eval_needlessly!). У вас есть код и ответ @ charlietfl доказывает, что он не нужен :) – atwright147

+0

Я хотел сделать его динамичным. Если когда-нибудь вы добавите еще один «SelType», вам не нужно будет возвращаться и обновлять ключ SelType до сопоставления функций и т. Д. – kawadhiya21

+0

kawadhiya21, что имеет смысл, но все же мне не разрешено использовать eval здесь. –

2

Может использовать объект для сопоставления SelType специфические методы

var methods = { 
    'a': setDefaultQQ, 
    'o': setDefaultOO, 
    'm': setDefaultMM, 
    ....  
} 

if(response.bMap && methods[SelType]){ 
    methods[SelType](response.bMap); 
}else{ 
    setDefaultData(); 
    showModal(); 
} 
+0

вы отсутствуете мои другие ключи eMap и Mmap –

+0

, поэтому вам понадобится дополнительная логика. Я предполагаю, что вы могли бы использовать один метод и передать объект ответа в качестве аргумента и делать все там – charlietfl

+0

Да, я добавлял дополнительную логику, но это метод, в котором я передаю свой параметр ответа. Вы хотите добавить мне другой метод отделить логику? –