我使用javascript
为特定数组设置了一些if条件if (activity.indexOf("strategy session") != -1) {
$("#FoPStrategySession").show();
}
if (activity.indexOf("sessions") != -1) {
$("#acprojectname").show();
if (supportmodel == "Level") {
$(".accombohide").hide();
$("[title='Test']").val("NA");
$("[title='Test2']").val("NA");
}
}
if (activity.indexOf("virtual") != -1) {
if (supportmodel == "Level") {
$(".lvl3_consult").hide();
$("[title='Test']").val("NA");
$("[title='Test2']").val("NA");
}
}
if (activity.indexOf("Other") != -1) {
$("#acactivityother").show();
}
有没有其他方法可以使用switch case或任何其他方法高效编写此代码?
答案 0 :(得分:1)
if()
或switch()
语句。您可以降低圈复杂度(现在为7)并最终获得更好的代码。请注意,已经重构了一些jQuery选择器$('[title="Test"], [title="Test2"]').val('NA');
并分别使用比较运算符===
和!==
而不是==
和!=
。
"一段源代码的圈复杂度是通过源代码的线性独立路径数的计数。" - http://en.wikipedia.org/wiki/Cyclomatic_complexity
还创建了变量,以避免jQuery为同一选择器多次搜索DOM。
代码:
var $foPStrategySession = $('#FoPStrategySession'),
$acprojectname = $('#acprojectname'),
$titleTests = $('[title="Test"], [title="Test2"]'),
$acactivityother = $('#acactivityother'),
$accombohide = $('.accombohide'),
$lvl3_consult = $('.lvl3_consult'),
obj = {
'strategy session': function () {
$foPStrategySession.show();
},
'sessions': function () {
$acprojectname.show();
if (supportmodel === 'Level') {
$accombohide.hide();
$titleTests.val('NA');
}
},
'virtual': function () {
if (supportmodel === 'Level') {
$lvl3_consult.hide();
$titleTests.val('NA');
}
},
'Other': function () {
$acactivityother.show();
}
};
Object.keys(obj).forEach(function (o) {
if (activity.indexOf(o) !== -1) {
obj[o]();
}
});
答案 1 :(得分:1)
首先,你不应该再次查询DOM:
var strategySession = $("#FoPStrategySession");
var acprojectname = $('#acprojectname');
// and so on..
稍后您将使用上面创建的引用访问这些DOM元素。
现在,您可以使用Array.prototype.forEach
来使用switch
:
activity.forEach(function(act) {
// I suggest you that you lower case each activity
// to avoid further issues...
switch(act.toLowerCase())
case "strategy session":
strategySession.show();
break;
// other cases...
default:
throw Error("Not supported activity");
}
});
旁注:我了解activity
是数组。否则,您将使用相等运算符检查activity
是否为某个特定string
,我的答案应该需要一些重构。如果我错误地认为activity
是array
... ,请将我的回答发表评论。